<!DOCTYPE html>
<html lang="en"><head><link type="text/css" rel="stylesheet" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/comments.css">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta http-equiv="Content-Language" content="zh-cn">
	<meta content="always" name="referrer">
						<meta name="keywords" content="Scrapy 入门教程,Scrapy 中文指南,Python教程">
			
						<meta name="description" content="在本篇教程中，我们假定您已经安装好Scrapy。如若不然，请参考Item编写该命令将会创建包含下列内容的tutorial...">
			
			<title>Scrapy 入门教程 - Scrapy 中文指南 - 极客学院Wiki</title>
	
	<link rel="stylesheet" type="text/css" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/register.css">
	<link rel="shortcut icon" href="http://wiki.jikexueyuan.com/assets/favicon.ico" type="image/x-icon">
	<link rel="stylesheet" type="text/css" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/bootstrap.css">
	<link rel="stylesheet" type="text/css" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/detail.css">
	<link rel="stylesheet" type="text/css" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/markdownbody.css">
	<style type="text/css">
		#footer{
			display: none;
		}
	</style>
<style type="text/css">	* {
	    padding: 0;
	    margin: 0;
	    box-sizing: border-box;
	}

	#jk-header a,
	#jk-header a:link,
	#jk-header a:visited {
	    color: #555555;
	    text-decoration: none;
	    font-size: 15px;
	}

	#jk-header a:hover,
	#jk-header nav li:hover {
	    color: #35b558;
	}

	#jk-header {
	    background: #fff;
	    height: 70px;
	    line-height: 70px;
	    border-bottom: 1px solid #e4e4e4;
	}

	#jk-header h1 {
	    display: inline;
	}

	#jk-header .header {
	    width: 1000px;
	    margin: 0 auto;
	}

	#jk-header .logo {
	    width: 100px;
	    height: 37px;
	    margin-top: 15px;
	    float: left;
	    margin-right:45px;
	}

	#jk-header .logo img {
	    display: block;
	}

	#jk-header nav {
	    /*width: 540px;*/
	    display: inline-block;
	    float: left;
	}

	#jk-header nav li {
	    color: #555;
	    list-style: none;
	    line-height: 69px;
	    padding-right: 32px;
	    text-decoration: none;
	    font-size: 15px;
	    float: left;
	    cursor: pointer;
	    position: relative;
	}

	#jk-header nav li:hover .slide-submeu {
	    display: block;
	}

	#jk-header nav li i.slide-icon {
	    transition: All 0.4s ease-in-out;
	    -webkit-transition: All 0.4s ease-in-out;
	    -moz-transition: All 0.4s ease-in-out;
	    -o-transition: All 0.4s ease-in-out;
	}

	#jk-header nav li:hover i.slide-icon {
	    transform: rotate(180deg);
	    -webkit-transform: rotate(180deg);
	    -moz-transform: rotate(180deg);
	    -o-transform: rotate(180deg);
	    -ms-transform: rotate(180deg);
	}

	#jk-header nav li i.slide-icon {
	    background: url(//e.jikexueyuan.com/headerandfooter/images/icon.png);
	    background-position: 0px -47px;
	    display: inline-block;
	    width: 11px;
	    margin-left: 5px;
	    height: 7px;
	}

	#jk-header .nav-other {
	    float: right;
	    width: 130px;
	    height: 70px;
	}

	#jk-header .centerbox {
	    display: inline-block;
	    width: 30px;
	    height: 30px;
	    margin-right: 15px;
	    margin-top: 20px;
	}

	#jk-header .centerbox:nth-child(2) {
	    margin-right: 0px;
	}

	#jk-header .centerbox:hover {
	    background: #fafafa;
	    border-radius: 5px;
	}

	#jk-header .search {
	    border: 1px solid #e4e4e4;
	    height: 32px;
	    width: 230px;
	    display: inline-block;
	    float: left;
	    margin-top: 20px;
	    transition: all .3s;
	}

	#jk-header .search.active {
	    border-color: #35b558;
	    box-shadow: 0 0 5px #35b558;
	}

	#jk-header .search.active .search-result {
		z-index:999;
		position:relative;
	    display: block;
	}

	#jk-header .search.active input {
	    border-right-color: #35b558;
	}

	#jk-header .search input {
	    float: left;
	    width: 190px;
	    height: 30px;
	    border: none;
	    padding: 0px 8px;
	    border-right: 1px solid #e4e4e4;
	    outline: none;
	    font-size: 12px;
	}

	#jk-header .search .search-result {
	    display: none;
	    width: 230px;
	    margin-left: -1px;
	    margin-top: 31px;
	    border: 1px solid #e4e4e4;
	    background-color: #fff;
	    list-style: none;
	    box-shadow: -1px 3px 5px rgba(000, 000, 000, 0.3);
	}

	#jk-header .search .keyup a {
	    padding-left: 10px;
	}

	#jk-header .search .hotsearch a {
	    padding-left: 25px;
	}

	#jk-header .search .search-result a {
	    position: relative;
	    display: block;
	    color: #333;
	    font-size: 12px;
	    height: 30px;
	    padding-right: 70px;
	    line-height: 30px;
	    overflow: hidden;
	    white-space: nowrap;
	    text-overflow: ellipsis;
	}

	#jk-header .search .search-result a .label {
	    position: absolute;
	    top: 50%;
	    right: 8px;
	    transform: translate(0, -50%);
	    font-size: 11px;
	    line-height: 11px;
	    padding: 5px;
	    border-radius: 2px;
	}

	#jk-header .search .search-result a .label.label-green {
	    background-color: #d1f6eb;
	    color: #1fa980;
	}

	#jk-header .search .search-result a .label.label-blue {
	    background-color: #cfe8ff;
	    color: #659bd5;
	}

	#jk-header .search .search-result a .label.label-purple {
	    background-color: #e9e0ff;
	    color: #a188e2;
	}

	#jk-header .search .search-result a:hover {
		color:#35b558;
	    background-color: #fafafa;
	}

	#jk-header .search .search-result a.search-hot {
	    padding-left: 10px;
	    color: #d23322;
	}

	#jk-header .search-icon {
	    width: 18px;
	    height: 18px;
	    float: right;
	    margin-top: 6px;
	    margin-right: 10px;
	    display: inline-block;
	    background: url(//e.jikexueyuan.com/headerandfooter/images/icon.png) 0 0 no-repeat;
	    background-position: 0 0;
	    cursor: pointer;
	}

	#jk-header .message {
	    cursor: pointer;
	    width: 15px;
	    height: 18px;
	    display: block;
	    position: relative;
	    margin: 7px 0px 0 8px;
	    background: url(//e.jikexueyuan.com/headerandfooter/images/icon.png) 0 0 no-repeat;
	    background-position: -26px 0;
	}

	#jk-header .message .have {
	    position: absolute;
	    top: -5px;
	    right: -2px;
	    z-index: 700;
	    width: 6px;
	    height: 6px;
	    background: #ff7263;
	    border-radius: 50%;
	}
	/*登录后*/

	#jk-header .nav-other .userinfo-login {
	    width: 47px;
	    height: 69px;
	    display: inline-block;
	    position: relative;
	    float: right;
	    padding-top: 18px;
	}

	#jk-header .nav-other .userinfo-login:hover .slide-submeu {
	    display: block;
	    left: auto;
	    right: 0;
	    top: 69px;
	}

	#jk-header .userinfo-login a img {
	    width: 32px;
	    height: 32px;
	    display: block;
	    border-radius: 50%;
	    float: right;
	}
	/*未登录*/

	#jk-header .userinfo-notlogin {
	    display: inline-block;
	    float: right;
	    font-size: 14px
	}

	#jk-header .userinfo-notlogin a {
	    font-size: 14px;
	    float: left;
	}

	#jk-header .userinfo-notlogin i {
	    border-left: 1px solid #ccc;
	    height: 15px;
	    display: inline-block;
	    float: left;
	    overflow: hidden;
	    margin-top: 27px;
	}

	#jk-header .userinfo-notlogin a {
	    padding: 0px 15px;
	    float: left;
	}

	#jk-header .userinfo-notlogin a:nth-child(3) {
	    padding-right: 0;
	}
	/*子菜单*/

	#jk-header .submenu {
	    position: absolute;
	    width: 210px;
	    font-size: 12px;
	    color: #333;
	    background: #fff;
	    z-index: 800;
	    padding: 14px 0;
	    right: 0;
	    top: 52px;
	    border-top: 1px solid #e0e0e0;
	    display: none;
	}

	#jk-header .submenu a {
	    line-height: 35px;
	    padding: 0 14px;
	    display: block;
	    font-size: 12px;
	}

	#jk-header .submenu a:hover {
	    background: #fafafa;
	}

	#jk-header .submenu a {
	    color: #333333;
	}
	/*user-slide*/

	#jk-header .user-slide a i {
	    width: 12px;
	    height: 12px;
	    background: url(//e.jikexueyuan.com/headerandfooter/images/icon.png) 0 0 no-repeat;
	    display: inline-block;
	    margin-right: 12px;
	    float: left;
	}

	#jk-header a i.learningcenter-icon {
	    background-position: -42px -42px;
	    margin-top: 11px;
	    margin-left: 2px;
	}

	#jk-header a i.homepage-icon {
	    width: 16px;
	    height: 12px;
	    margin-top: 11px;
	    background-position: -70px -23px;
	}


	#jk-header .zhiye-submenu a i.data-icon {
	    background: url(//e.jikexueyuan.com/headerandfooter/images/data.png) 0 0 no-repeat;
	    background-size: 20px 20px;
	    width: 20px;
	    height: 20px;
	    margin-left: -4px;
	    margin-top: 3px;
	    margin-right: 8px;
	}
	#jk-header .zhiye-submenu a i.mlearning-icon{
		background: url(//e.jikexueyuan.com/headerandfooter/images/ml.png) 0 0 no-repeat;
		background-size: 20px 20px;
		width: 20px;
		height: 20px;
		margin-left: -4px;
		margin-top: 3px;
		margin-right: 8px;
	}

	#jk-header a i.set-icon {
	    width: 12px;
	    height: 12px;
	    margin-left: 2px;
	    margin-top: 11px;
	    background-position: -62px -43px;
	}

	#jk-header a i.exit-icon {
	    width: 12px;
	    height: 12px;
	    margin-left: 3px;
	    margin-top: 11px;
	    background-position: -20px -45px;
	}
	/*职业子菜单*/

	#jk-header .slide-submeu {
	    position: absolute;
	    left: 0;
	    top: 69px;
	    z-index: 1000;
	    width: 200px;
	    padding: 5px 0;
	    background: #fff;
	    border-top: 1px solid #E4E4E4;
	    box-shadow: -1px 3px 5px rgba(000, 000, 000, 0.3);
	    display: none;
	}

	#jk-header .careerpath .slide-submeu a {
	    line-height: 30px;
	}

	#jk-header .careerpath .slide-submeu a:nth-child(2n) {
	    background: #fff;
	}

	#jk-header .slide-submeu a {
	    display: block;
	    font-size: 12px;
	    line-height: 35px;
	    padding: 0px 15px;
	}

	#jk-header .slide-submeu strong {
	    display: block;
	    font-size: 12px;
	    line-height: 20px;
	    font-weight: normal;
	    padding: 0px 15px;
	    color: #b9b9b9;
	    background: #fafafa;
	}

	#jk-header .slide-submeu a:nth-child(2n) {
	    background: #FAFAFA;
	}
	/*icon*/

	#jk-header .zhiye-submenu a i {
	    display: inline-block;
	    float: left;
	    width: 14px;
	    height: 14px;
	    margin-top: 8px;
	    margin-right: 10px;
	    background: url(//e.jikexueyuan.com/headerandfooter/images/icon.png);
	}

	#jk-header .zhiye-submenu a i.web-icon {
	    background-position: -94px -23px;
	}

	#jk-header .zhiye-submenu a i.android-icon {
	    background-position: 0px -26px;
	}

	#jk-header .zhiye-submenu a i.ios-icon {
	    background-position: -48px -19px;
	    margin-top: 6px;
	}

	#jk-header .zhiye-submenu a i.python-icon {
	    background-position: -76px 0px;
	    margin-top: 8px;
	}

	#jk-header .zhiye-submenu a i.wx-icon {
	    background-position: -99px 0px;
	    margin-top: 7px;
	}

	#jk-header .zhiye-submenu a i.golang-icon {
	    background-position: -20px -26px;
	    margin-top: 9px;
	}

	#jk-header .zhiye-submenu a i.php-icon {
	    background-position: -48px 0px;
	    width: 20px;
	    margin-left: -4px;
	    margin-top: 9px;
	}

	#jk-header .zhiye-submenu a i.yw-icon {
	    background-position: -102px -45px;
	    margin-top: 12px;
	}

	#jk-header .zhiye-submenu a i.xmjl-icon {
	    background-position: -82px -45px;
	    margin-top: 11px;
	}

	#jk-header #uservip-icon {
	    width: 13px;
	    height: 13px;
	    display: block;
	    position: absolute;
	    top: 38px;
	    left: 39px;
	}

	#jk-header .learn-center {
	    background: url(//e.jikexueyuan.com/headerandfooter/images/center-icon.png) no-repeat 0 0;
	    width: 16px;
	    height: 16px;
	    margin: 8px 0 0 8px;
	    display: block;
	}

	#jk-header .vip-icon {
	    background: url(//e.jikexueyuan.com/headerandfooter/images/vip.png) 0 0 no-repeat;
	    background-size: 13px 13px;
	}

	#jk-header .svip-icon {
	    background: url(//e.jikexueyuan.com/headerandfooter/images/svip.png) 0 0 no-repeat;
	    background-size: 13px 13px;
	}

	#jk-header ::-webkit-input-placeholder {
	    color: #b9b9b9;
	}

	#jk-header :-moz-placeholder {
	    color: #b9b9b9;
	}

	#jk-header ::-moz-placeholder {
	    color: #b9b9b9;
	}

	#jk-header :-ms-input-placeholder {
	    color: #b9b9b9;
	}

	#header_top_notice {
	    display: none;
	    background-color: #ff8530;
	}

	#header_top_notice p {
	    font-size: 13px;
	    line-height: 13px;
	    color: #fff;
	    text-align: center;
	    padding: 10px;
	    width: 1000px;
	    margin: 0 auto;
	}

	#header_top_notice span {
	    vertical-align: middle;
	}

	#header_top_notice i {
	    display: none;
	    position: absolute;
	    right: 100px;
	    width: 15px;
	    height: 15px;
	    border: 1px solid #fff;
	    vertical-align: middle;
	    border-radius: 50%;
	    margin-left: 10px;
	}

	#header_top_notice i::after {
	    content: '';
	    position: absolute;
	    top: 6px;
	    left: 2px;
	    width: 10px;
	    height: 1px;
	    transform: rotate(45deg);
	    background-color: #fff;
	}

	#header_top_notice i::before {
	    content: '';
	    position: absolute;
	    top: 6px;
	    left: 2px;
	    width: 10px;
	    height: 1px;
	    transform: rotate(-45deg);
	    background-color: #fff;
	}

	#jk-header .qy-box i {
	    display: inline-block;
	    float: left;
	    width: 14px;
	    height: 14px;
	    margin-top: 8px;
	    margin-right: 5px;
	    background: url(//e.jikexueyuan.com/headerandfooter/images/company_2.png) no-repeat;
	}

	#jk-header .qy-box i.wr-icon {
	    background-position: -35px 0;
	    margin-top: 11px;
	}

	#jk-header .qy-box i.aws-icon {
	    background-position: -20px 0;
	    margin-top: 9px;
	}

	#jk-header .qy-box i.txy-icon {
	    background-position: 0px 0;
	    width: 20px;
	    margin-left: -2px;
	    margin-top: 10px;
	}

	#jk-header .qy-box i.gt-icon {
	    background-position: -50px 0;
	    margin-top: 10px;
	    margin-left: 1px;
	}
	#jk-header .qy-box i.baidu-icon {
	    background-position: -72px 0;
	    margin-top: 10px;
	}</style><script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/z_stat.js"></script><script async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/analytics.js"></script><script type="text/javascript" async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/vds.js"></script><script async="" charset="UTF-8" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/meiqia_002.js"></script><script src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/share.js"></script><style type="text/css">@charset "utf-8";
.nc-container .imgCaptcha .imgCaptcha_text {
  width: 110px;
}
.nc-container .imgCaptcha .imgCaptcha_text input {
  border: 1px solid #ccc;
}
#regVerifyId {
  box-sizing: content-box;
  width: 260px;
  float: left;
}
#regVerifyText {
  box-sizing: content-box;
  width: 100px;
  float: right;
  height: 34px;
  text-align: center;
  line-height: 34px;
  color: #999;
}
.nc-container .nc_scale .clickCaptcha .clickCaptcha_text {
  float: right;
  height: 0;
  line-height: 0;
}
.nc_iconfont.nc_btn_2 {
  top: 15px;
  right: -11px;
}
.nc-container .nc_scale .clickCaptcha {
  transform: scale(0.8);
  -webkit-transform: scale(0.8);
  -moz-transform: scale(0.8);
  top: 10px;
  height: 250px;
}
#regVerifyId .nc_scale {
  width: auto;
}
.nc-container .imgCaptcha .imgCaptcha_text {
  position: absolute;
  background: transparent!important;
}
.nc-container .nc_scale .clickCaptcha {
  top: 10px!important;
}
.LoginAndRegister-Mask {
  min-width: 775px;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.4);
  z-index: 9999;
}
#register-popup,
#login-popup {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 9999;
}
#register-popup {
  width: 755px;
  height: 443px;
  margin-left: -377px;
  margin-top: -221px;
}
#login-popup {
  width: 450px;
  height: 650px;
  margin-left: -225px;
  margin-top: -290px;
}
.user-select-none {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.clear {
  clear: both !important;
}
.float-left {
  float: left !important;
}
.float-right {
  float: right !important;
}
.disabled:hover,
.disabled:hover a {
  cursor: default !important;
  cursor: not-allowed !important;
}
/* color */
.passport-light-color {
  /* 浅色 */
  color: #999999 !important;
}
.passport-tip-color {
  /* 提示色 */
  color: #fd6505 !important;
}
.passport-warn-color {
  /* 警告色 */
  color: #ff0000 !important;
}
.passport-success-color {
  /* 成功色 */
  color: #339734 !important;
}
/* mask */
.passport-mask {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 900;
  width: 100%;
  height: 100%;
  background: #000000;
  opacity: 0.4;
}
/* control base */
.passport-placeholder {
  color: #999999 !important;
}
.passport-empty-input,
.passport-empty-input:focus,
.passport-empty-input:hover {
  background: #ffffff !important;
  border: 1px solid #ff6711 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
.passport-error-input,
.passport-error-input:focus,
.passport-error-input:hover {
  background: #ffffff !important;
  border: 1px solid #ff6711 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
.passport-empty-txt {
  color: #ff0000 !important;
}
.passport-error-txt {
  color: #ff0000 !important;
}
.passport-success-txt {
  color: #35b558 !important;
}
/* note */
.passport-note {
  color: #666666;
  vertical-align: middle;
}
span.passport-note {
  padding-left: 5px;
}
div.passport-note {
  padding: 5px 0 0;
  line-height: 1.8;
}
.passport-note strong {
  padding: 0 5px;
  color: #ff0000;
}
.passport-note b {
  padding: 0 5px;
  color: #333333;
}
/* button */
.passport-btn {
  height: 26px;
  padding: 0 15px;
  font-size: 12px;
  border: 1px solid #eaeaea;
  -webkit-transition: background-color 0.8s, border-color 0.8s;
  -moz-transition: background-color 0.8s, border-color 0.8s;
  transition: background-color 0.8s, border-color 0.8s;
  background: #eaeaea;
  border-color: #eaeaea;
  color: #666666 !important;
  /* 以下样式针对非 input、button 的其他标签 */
  display: inline-block;
  line-height: 24px;
  text-align: center;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}
.passport-btn .icon {
  margin-right: 5px;
}
.passport-btn:hover {
  background: #eeeeee;
  color: #999999 !important;
}
.passport-btn:active {
  background: #eeeeee;
  color: #999999 !important;
}
.passport-btn:hover {
  text-decoration: none;
}
.passport-btn:not(button) .icon {
  position: relative;
  top: -1px;
}
.passport-btn.disabled,
.passport-btn[disabled],
.passport-btn.disabled:hover,
.passport-btn[disabled]:hover,
.passport-btn.disabled:focus,
.passport-btn[disabled]:focus,
.passport-btn.disabled:active,
.passport-btn[disabled]:active {
  -webkit-transition: none;
  -moz-transition: none;
  transition: none;
  background: #eeeeee !important;
  border: 1px solid #e7e7e7 !important;
  color: #999999 !important;
  cursor: default !important;
  cursor: not-allowed !important;
}
/* button theme */
.passport-btn-def {
  background: #35b558;
  border-color: #35b558;
  color: #ffffff !important;
}
.passport-btn-def:hover {
  background: #51cc73;
  border-color: #51cc73;
  color: #ffffff !important;
}
.passport-btn-def:active {
  background: #51cc73;
  border-color: #51cc73;
  color: #ffffff !important;
}
.passport-btn-primary {
  background: #2d85ca;
  border-color: #2d85ca;
  color: #ffffff !important;
}
.passport-btn-primary:hover {
  background: #529dd8;
  border-color: #529dd8;
  color: #ffffff !important;
}
.passport-btn-primary:active {
  background: #529dd8;
  border-color: #529dd8;
  color: #ffffff !important;
}
/* button height */
.passport-btn.xl {
  /* extra large */
  height: 40px;
  padding: 0 30px;
  font-size: 18px;
  line-height: 38px;
}
/* button width */
.passport-btn.w-full {
  width: 100%;
  padding: 0 !important;
}
/* button padding */
/* button file */
.passport-txt[disabled],
.passport-txt[disabled]:hover,
.passport-txt[disabled]:focus,
.passport-txt[disabled]:active {
  background: #f8f8f8 !important;
  border-color: #f1f1f1 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  cursor: default !important;
  cursor: not-allowed !important;
}
/* input text */
.passport-txt {
  width: 100px;
  height: 26px;
  padding: 5px 5px;
  font-size: 12px;
  line-height: 16px;
  border: 1px solid #e4e4e4;
  border-color: #e4e4e4;
  -webkit-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
  -moz-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.passport-txt[readonly="readonly"],
.passport-txt[readonly="readonly"]:hover,
.passport-txt[readonly="readonly"]:focus {
  border-color: #e4e4e4 !important;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.passport-txt:hover {
  border-color: #cccccc;
  -webkit-box-shadow: 0 0 5px #ffffff;
  box-shadow: 0 0 5px #ffffff;
}
.passport-txt:focus {
  border-color: #35b558;
  -webkit-box-shadow: 0 0 5px #51cc73;
  box-shadow: 0 0 5px #51cc73;
}
/* text radius */
.passport-txt.txt-radius {
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
}
/* text height */
.passport-txt.xl {
  height: 40px;
  padding: 11px 11px;
  font-size: 14px;
  line-height: 18px;
}
/* text width */
.passport-txt.w-lg {
  width: 100%;
}
.passport-txt.w-full {
  width: 100%;
}
/* tel text */
/* tel height*/
/* txt section */
/* file */
/* select */
/* select height */
/* select width */
/* textarea */
/* icon */
.passport-icon {
  display: inline-block;
  vertical-align: middle;
  background-repeat: no-repeat;
}
.passport-tab > .tabs ul:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-tab > .tabs li {
  float: left;
  cursor: pointer;
}
.passport-tab > .tabbed > .tab-group {
  display: none;
}
.passport-popup {
  -webkit-text-size-adjust: 100%;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  /* checkbox & radio */
  /* 18x18 */
  /* 32x32 */
  /* 38x38 */
  /* 48x48 */
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 990;
  padding: 40px;
  background: #fff;
  color: #999999;
  font: normal 12px/1.4 Verdana, "Lantinghei SC", "Hiragino Sans GB", 'Microsoft YaHei', Helvetica, arial, simsun, sans-serif;
  line-height: 1.4;
}
.passport-popup *,
.passport-popup *:after,
.passport-popup *:before {
  -webkit-box-sizing: inherit;
  -moz-box-sizing: inherit;
  box-sizing: inherit;
}
.passport-popup button,
.passport-popup input,
.passport-popup select,
.passport-popup textarea {
  color: inherit;
  font-family: inherit;
  font-size: 100%;
  font-weight: inherit;
}
.passport-popup label {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  cursor: pointer;
}
.passport-popup h2,
.passport-popup h3 {
  font-size: 100%;
}
.passport-popup ul {
  list-style: none;
  padding-left: 0px;
}
.passport-popup img {
  vertical-align: middle;
  border: 0;
}
.passport-popup input,
.passport-popup button {
  outline: 0;
}
.passport-popup a {
  color: #35b558;
  text-decoration: none;
}
.passport-popup a:hover {
  color: #51cc73;
  text-decoration: none;
}
.passport-popup input,
.passport-popup button,
.passport-popup .passport-btn,
.passport-popup select,
.passport-popup textarea {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.passport-popup input,
.passport-popup button,
.passport-popup .passport-btn,
.passport-popup select,
.passport-popup label {
  vertical-align: middle;
}
.passport-popup button,
.passport-popup input[type="button"],
.passport-popup input[type="submit"],
.passport-popup input[type="reset"] {
  line-height: normal !important;
  cursor: pointer;
}
.passport-popup input[type="checkbox"],
.passport-popup input[type="radio"] {
  width: 13px;
  height: 13px;
  margin: 0 5px 0 2px;
  cursor: pointer;
}
.passport-popup input[type="checkbox"][disabled],
.passport-popup input[type="radio"][disabled],
.passport-popup input[type="checkbox"][disabled]:hover,
.passport-popup input[type="radio"][disabled]:hover,
.passport-popup input[type="checkbox"][disabled]:focus,
.passport-popup input[type="radio"][disabled]:focus,
.passport-popup input[type="checkbox"][disabled]:active,
.passport-popup input[type="radio"][disabled]:active {
  cursor: default !important;
  cursor: not-allowed !important;
}
.passport-popup .icon-refresh {
  width: 18px;
  height: 18px;
  background-position: 0 -38px;
}
.passport-popup .icon-phone,
.passport-popup .icon-letter {
  width: 32px;
  height: 32px;
  background-position: -49px -58px;
}
.passport-popup .icon-letter {
  background-position: -83px -58px;
}
.passport-popup .icon-tencent,
.passport-popup .icon-weibo,
.passport-popup .icon-weixin,
.passport-popup .icon-eoe {
  width: 55px;
  height: 55px;
  background-position: 0 -65px;
}
.passport-popup a:hover .icon-tencent {
  background-position: 0 -1px;
}
.passport-popup .icon-weibo {
  background-position: -81px -65px;
}
.passport-popup a:hover .icon-weibo {
  background-position: -81px -1px;
}
.passport-popup .icon-weixin {
  background-position: -162px -65px;
}
.passport-popup a:hover .icon-weixin {
  background-position: -162px -1px;
}
.passport-popup .icon-eoe {
  background-position: -243px -65px;
}
.passport-popup a:hover .icon-eoe {
  background-position: -243px -1px;
}
.passport-popup .icon-success {
  width: 48px;
  height: 48px;
  background-position: 0 -58px;
}
.passport-popup:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-popup .close {
  position: absolute;
  top: 10px;
  right: 10px;
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  cursor: pointer;
  background: url("//sp1.jikexueyuan.com/static/images/popup_def_close.png") no-repeat center center / 14px 14px;
}
.passport-popup > .layout-inner {
  position: relative;
  float: left;
  width: 100%;
  height: 100%;
  background: #fff;
}
.passport-popup > .layout-inner > .hd {
  height: 40px;
  padding: 0 30px 0 8px;
  line-height: 40px;
  cursor: default ;
}
.passport-popup > .layout-inner > .hd h2 {
  color: #000;
  width: 300px;
  float: left;
  margin: 0px;
  display: inline-block;
  font-size: 18px;
  font-weight: normal;
}
.passport-popup > .layout-inner > .hd p {
  font-size: 12px;
  color: #999;
  margin-top: 10px;
}
#warning {
  position: fixed;
  top: -40px;
  left: 50%;
  z-index: 60000;
  opacity: 0;
  padding: 4px 20px;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
  font-size: 16px;
  font-weight: 400;
  color: #fff;
  text-align: center;
}
.waring-success {
  background: #35b558;
}
.waring-failure {
  background: #ff5c00;
}
.waring-sub {
  background: #2d85ca;
}
.passport-step {
  padding: 8px 6px;
}
.passport-step li {
  position: relative;
  top: 0;
  left: 0;
  float: left;
  width: 100px;
  margin-left: 90px;
  padding-top: 35px;
  text-align: center;
}
.passport-step li.first {
  margin-left: 0;
}
.passport-step li .disc {
  position: absolute;
  top: 0;
  left: 50%;
  z-index: 20;
  display: block;
  width: 30px;
  height: 30px;
  margin-left: -15px;
  background-color: #b9b9b9;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  color: #fff;
  font: 16px/30px arial;
  cursor: default;
}
.passport-step li .strip {
  position: absolute;
  top: 13px;
  left: -120px;
  z-index: 10;
  display: block;
  width: 150px;
  height: 3px;
  background-color: #b9b9b9;
}
.passport-step p {
  color: #666;
  font-size: 14px;
  line-height: 18px;
  text-align: center;
  white-space: nowrap;
}
.passport-step .now .disc,
.passport-step .now .strip,
.passport-step .past .disc,
.passport-step .past .strip {
  background-color: #35b558;
}
.passport-safely {
  margin-top: 10px;
}
.passport-safely li {
  float: left;
  width: 60px;
  height: 14px;
  margin-right: 4px;
  background-color: #ddd;
  color: #fff;
  font-size: 12px;
  line-height: 14px;
  text-align: center;
  cursor: default;
}
.passport-safely.safely-danger .danger {
  background-color: #da4619;
}
.passport-safely.safely-general .danger,
.passport-safely.safely-general .general {
  background-color: #ff5c00;
}
.passport-safely.safely-safe li {
  background-color: #35b558;
}
.clearfix:after,
.passport-step:after,
.passport-safely:after,
.passport-sign:after,
.passport-form .form-imgcode .form-cont:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-icon {
  background-image: url("//sp1.jikexueyuan.com/static/images/fouricon.png");
  background-size: 298px 120px;
}
.passport-icon2 {
  background-image: url("//sp1.jikexueyuan.com/static/images/passport.png");
  background-size: 155px 106px;
}
.passport-sign {
  /*  height: 400px;*/
  /*padding: 25px 0 0 0;*/
  background-color: #fff;
}
.passport-sign .main-form,
.passport-sign .aside {
  float: left;
  /*  padding: 0 25px;*/
}
#register-popup .main-form {
  width: 385px;
  border-right: 2px solid #fafafa;
  padding-right: 20px;
}
#login-popup .main-form {
  width: 370px;
}
.passport-sign .main-form h2 {
  color: #333;
  margin-bottom: 20px;
  font-size: 20px;
  font-weight: normal;
  line-height: 20px;
}
/*.passport-sign .main-form.main-form-sign {
  min-height: 350px;
}*/
.passport-sign .aside {
  width: 290px;
}
.LoginAndRegister-Mask .passport-sign .passport-goto {
  margin-bottom: 10px;
  padding-top: 10px;
  padding-left: 20px;
  color: #999;
  font-size: 16px;
}
.passport-sign .passport-third .hd {
  height: 16px;
  font-size: 12px;
  text-align: center;
  width: 240px;
  margin: 0 auto;
}
.passport-sign .passport-third .hd .layout-inner {
  margin-bottom: 7px;
  border-bottom: 2px solid #f2f2f2;
}
.layout-inner .quikely {
  border-bottom: 1px solid #e4e4e4;
  text-align: center;
  height: 10px;
  margin: 15px 0 10px 0;
}
.layout-inner .quikely span {
  padding: 5px;
  background: #fff;
}
/*.passport-sign .passport-third .hd .layout-inner h3 {
  font-size: 18px;
  width: 300px;
  float: left;
}*/
.passport-sign .passport-third .hd h3 {
  width: 106px;
  margin: 0 auto -8px;
  background-color: #fff;
  font-weight: 400;
  line-height: 16px;
}
.passport-popup .links {
  margin: 0 auto;
  padding-top: 20px;
  text-align: center;
}
.passport-popup .links a {
  display: inline-block;
  margin: 0 8px;
}
.passport-popup .links a:last-child {
  margin-right: 0;
}
/*.passport-sign .passport-ad {
  width: 240px;
  height: 60px;
  margin-top: 80px;
}*/
.passport-sign .passport-tab .tabs {
  margin-bottom: 15px;
}
.passport-sign .passport-tab .tabs ul {
  border-bottom: 2px solid #e4e4e4;
}
.passport-sign .passport-tab .tabs li {
  float: left;
  width: 50%;
  height: 32px;
  margin-bottom: -2px;
  text-align: center;
  font-size: 16px;
}
.passport-sign .passport-tab .tabs li.active {
  color: #35b558;
  border-bottom: 2px solid #35b558;
}
.passport-form .form-item {
  margin-bottom: 12px;
}
.passport-form .form-cont {
  position: relative;
  line-height: 26px;
}
.passport-form .js-placeholder {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  height: 40px;
  padding: 11px;
  font-size: 12px;
  line-height: 18px;
  text-align: left;
}
.passport-form .passport-txt {
  position: relative;
  z-index: 10;
  color: #666;
  font-size: 12px;
}
.passport-form .passport-txt.placeholder {
  background-color: rgba(0, 0, 0, 0);
}
.passport-form .passport-note {
  position: absolute;
  top: 0;
  right: 0;
  height: 40px;
  z-index: 20;
  padding: 0;
  background-color: rgba(0, 0, 0, 0);
  color: #fff;
  line-height: 26px;
}
.passport-form .passport-note span {
  display: block;
  height: 26px;
  margin: 7px 7px 0 0;
  padding: 0 5px;
  background-color: #ff5c00;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
}
.passport-form .form-imgcode .layout-inner3 {
  position: relative;
  float: left;
  width: 100%;
}
.passport-form .form-imgcode .layout-inner {
  position: relative;
  float: left;
  width: 240px;
}
.passport-form .form-imgcode .imgcode {
  float: right;
}
.passport-form .form-imgcode .imgcode img {
  width: 100px;
  height: 40px;
  cursor: pointer;
}
.passport-form .form-imgcode .imgcode .passport-icon {
  cursor: pointer;
}
.passport-form .form-mcode .btn-getcode {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 20;
}
.passport-form .form-mcode .btn-getcode .passport-btn {
  text-overflow: initial;
  width: 90px;
  height: 26px;
  margin: 7px 7px 0 0;
  padding: 0;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
}
.passport-form .form-mcode .passport-note {
  right: 97px;
}
.passport-form .passport-sms {
  position: absolute;
  top: 100%;
  left: 0;
}
.passport-form .passport-sms a {
  color: #2d85ca;
}
.passport-form .passport-sms a:hover {
  color: #529dd8;
}
.passport-form .passport-sms a.disabled,
.passport-form .passport-sms a.disabled:hover {
  color: #999;
}
.passport-form-sign .form-treaty .passport-note span {
  margin: 0;
}
.passport-form-sign .form-treaty .form-cont {
  line-height: 20px;
}
.passport-form-sign .treaty {
  color: #999;
}
.passport-form-sign .treaty:hover {
  color: #35b558;
}
.passport-form-sign .form-sevenday label {
  float: left;
}
.passport-form-sign .form-sevenday .forget-link {
  float: right;
  color: #999;
}
.passport-form-sign .form-sevenday .forget-link:hover {
  color: #35b558;
}
.passport-forget {
  padding: 25px 0;
  background-color: #fff;
  min-height: 400px;
}
.passport-forget .passport-into {
  padding-top: 95px;
}
.passport-forget .passport-into .passport-btn {
  display: block;
  width: 250px;
  height: 54px;
  margin: 0 auto 50px;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  font-size: 16px;
  text-align: left;
  line-height: 52px;
}
.passport-forget .passport-into .passport-btn .passport-icon {
  margin-right: 25px;
}
.passport-forget .passport-step {
  margin: 40px auto 20px;
  width: 492px;
}
.passport-forget .passport-form {
  width: 300px;
  margin-right: auto;
  margin-left: auto;
}
.passport-forget .passport-form .form-submit {
  margin-top: 30px;
}
.passport-forget .passport-form .form-item {
  margin-bottom: 18px;
}
.passport-form-email .form-text,
.passport-form-phone .form-text,
.passport-form-email .form-code-text,
.passport-form-phone .form-code-text {
  width: 500px;
  margin: 0 -100px;
  text-align: center;
}
.passport-form-email .form-text p,
.passport-form-phone .form-text p,
.passport-form-email .form-code-text p,
.passport-form-phone .form-code-text p {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-bottom: 20px;
}
.passport-form-email .form-text big,
.passport-form-phone .form-text big,
.passport-form-email .form-code-text big,
.passport-form-phone .form-code-text big {
  font-size: 14px;
}
.passport-form-email .form-email,
.passport-form-phone .form-email {
  font-size: 14px;
}
.passport-form-email .form-email p,
.passport-form-phone .form-email p {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.passport-form-email .form-email em,
.passport-form-phone .form-email em {
  color: #35b558;
}
.passport-form-phone .form-code-text {
  position: relative;
  width: 100%;
  margin: 0;
  text-align: left;
}
.passport-form-phone .form-code-text .passport-icon {
  position: absolute;
  right: 0;
  left: 0;
  margin-left: -60px;
}
.passport-form-phone .passport-voice {
  color: #2d85ca;
}
.passport-form-phone .passport-voice:hover {
  color: #529dd8;
}
.mb-25 {
  margin-bottom: 25px !important;
}
.passport-popup .close-event {
  position: absolute;
  top: 10px;
  right: 10px;
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  cursor: pointer;
  background: url("//sp1.jikexueyuan.com/static/images/popup_def_close.png") no-repeat center center / 14px 14px;
}
.hide {
  display: none;
}
.passport-popup .regphone {
  font-size: 16px;
  text-align: center;
  color: #000;
  margin-top: 30px;
}
.passport-popup .regphone a:hover {
  text-decoration: underline;
}
.passport-popup .getfreevideo {
  margin-top: 10px;
  font-size: 14px;
  text-align: center;
  color: #000;
}
#register-registe-bindPhone {
  border-top: 5px solid #35B558;
}
#registe-bindPhone .instructions {
  display: block;
  margin: 20px 0 20px 0;
  padding: 10px 0;
  color: #000;
  border-top: 1px solid #35B558;
  border-bottom: 1px solid #35B558;
  font-size: 14px;
  line-height: 22px;
}
.passport-popup .phonedtm {
  display: block;
  text-align: right;
  margin: 30px 0px 10px 0px;
  color: #999;
}
.passport-popup .phonedtm i {
  float: right;
  width: 15px;
  height: 15px;
  display: inline-block;
  overflow: hidden;
  background: url("//sp1.jikexueyuan.com/static/images/feg-icon.png");
  background-position: -15px 0px;
  background-size: 30px 30px;
}
.passport-popup .phonedtm:hover i {
  background-position: -15px -15px;
}
#verifyId {
  box-sizing: content-box;
}
.nc-error-txt {
  color: #ff5c00;
  text-align: right;
  line-height: 34px;
}
.reg_pop_python {
  width: 280px;
  height: 100px;
  margin-bottom: 20px;
  margin-left: 20px;
}
</style><style type="text/css">@charset "utf-8";
.nc-container .imgCaptcha .imgCaptcha_text {
  width: 110px;
}
.nc-container .imgCaptcha .imgCaptcha_text input {
  border: 1px solid #ccc;
}
#regVerifyId {
  box-sizing: content-box;
  width: 260px;
  float: left;
}
#regVerifyText {
  box-sizing: content-box;
  width: 100px;
  float: right;
  height: 34px;
  text-align: center;
  line-height: 34px;
  color: #999;
}
.nc-container .nc_scale .clickCaptcha .clickCaptcha_text {
  float: right;
  height: 0;
  line-height: 0;
}
.nc_iconfont.nc_btn_2 {
  top: 15px;
  right: -11px;
}
.nc-container .nc_scale .clickCaptcha {
  transform: scale(0.8);
  -webkit-transform: scale(0.8);
  -moz-transform: scale(0.8);
  top: 10px;
  height: 250px;
}
#regVerifyId .nc_scale {
  width: auto;
}
.nc-container .imgCaptcha .imgCaptcha_text {
  position: absolute;
  background: transparent!important;
}
.nc-container .nc_scale .clickCaptcha {
  top: 10px!important;
}
.LoginAndRegister-Mask {
  min-width: 775px;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.4);
  z-index: 9999;
}
#register-popup,
#login-popup {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 9999;
}
#register-popup {
  width: 755px;
  height: 443px;
  margin-left: -377px;
  margin-top: -221px;
}
#login-popup {
  width: 450px;
  height: 650px;
  margin-left: -225px;
  margin-top: -290px;
}
.user-select-none {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.clear {
  clear: both !important;
}
.float-left {
  float: left !important;
}
.float-right {
  float: right !important;
}
.disabled:hover,
.disabled:hover a {
  cursor: default !important;
  cursor: not-allowed !important;
}
/* color */
.passport-light-color {
  /* 浅色 */
  color: #999999 !important;
}
.passport-tip-color {
  /* 提示色 */
  color: #fd6505 !important;
}
.passport-warn-color {
  /* 警告色 */
  color: #ff0000 !important;
}
.passport-success-color {
  /* 成功色 */
  color: #339734 !important;
}
/* mask */
.passport-mask {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 900;
  width: 100%;
  height: 100%;
  background: #000000;
  opacity: 0.4;
}
/* control base */
.passport-placeholder {
  color: #999999 !important;
}
.passport-empty-input,
.passport-empty-input:focus,
.passport-empty-input:hover {
  background: #ffffff !important;
  border: 1px solid #ff6711 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
.passport-error-input,
.passport-error-input:focus,
.passport-error-input:hover {
  background: #ffffff !important;
  border: 1px solid #ff6711 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
.passport-empty-txt {
  color: #ff0000 !important;
}
.passport-error-txt {
  color: #ff0000 !important;
}
.passport-success-txt {
  color: #35b558 !important;
}
/* note */
.passport-note {
  color: #666666;
  vertical-align: middle;
}
span.passport-note {
  padding-left: 5px;
}
div.passport-note {
  padding: 5px 0 0;
  line-height: 1.8;
}
.passport-note strong {
  padding: 0 5px;
  color: #ff0000;
}
.passport-note b {
  padding: 0 5px;
  color: #333333;
}
/* button */
.passport-btn {
  height: 26px;
  padding: 0 15px;
  font-size: 12px;
  border: 1px solid #eaeaea;
  -webkit-transition: background-color 0.8s, border-color 0.8s;
  -moz-transition: background-color 0.8s, border-color 0.8s;
  transition: background-color 0.8s, border-color 0.8s;
  background: #eaeaea;
  border-color: #eaeaea;
  color: #666666 !important;
  /* 以下样式针对非 input、button 的其他标签 */
  display: inline-block;
  line-height: 24px;
  text-align: center;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}
.passport-btn .icon {
  margin-right: 5px;
}
.passport-btn:hover {
  background: #eeeeee;
  color: #999999 !important;
}
.passport-btn:active {
  background: #eeeeee;
  color: #999999 !important;
}
.passport-btn:hover {
  text-decoration: none;
}
.passport-btn:not(button) .icon {
  position: relative;
  top: -1px;
}
.passport-btn.disabled,
.passport-btn[disabled],
.passport-btn.disabled:hover,
.passport-btn[disabled]:hover,
.passport-btn.disabled:focus,
.passport-btn[disabled]:focus,
.passport-btn.disabled:active,
.passport-btn[disabled]:active {
  -webkit-transition: none;
  -moz-transition: none;
  transition: none;
  background: #eeeeee !important;
  border: 1px solid #e7e7e7 !important;
  color: #999999 !important;
  cursor: default !important;
  cursor: not-allowed !important;
}
/* button theme */
.passport-btn-def {
  background: #35b558;
  border-color: #35b558;
  color: #ffffff !important;
}
.passport-btn-def:hover {
  background: #51cc73;
  border-color: #51cc73;
  color: #ffffff !important;
}
.passport-btn-def:active {
  background: #51cc73;
  border-color: #51cc73;
  color: #ffffff !important;
}
.passport-btn-primary {
  background: #2d85ca;
  border-color: #2d85ca;
  color: #ffffff !important;
}
.passport-btn-primary:hover {
  background: #529dd8;
  border-color: #529dd8;
  color: #ffffff !important;
}
.passport-btn-primary:active {
  background: #529dd8;
  border-color: #529dd8;
  color: #ffffff !important;
}
/* button height */
.passport-btn.xl {
  /* extra large */
  height: 40px;
  padding: 0 30px;
  font-size: 18px;
  line-height: 38px;
}
/* button width */
.passport-btn.w-full {
  width: 100%;
  padding: 0 !important;
}
/* button padding */
/* button file */
.passport-txt[disabled],
.passport-txt[disabled]:hover,
.passport-txt[disabled]:focus,
.passport-txt[disabled]:active {
  background: #f8f8f8 !important;
  border-color: #f1f1f1 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  cursor: default !important;
  cursor: not-allowed !important;
}
/* input text */
.passport-txt {
  width: 100px;
  height: 26px;
  padding: 5px 5px;
  font-size: 12px;
  line-height: 16px;
  border: 1px solid #e4e4e4;
  border-color: #e4e4e4;
  -webkit-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
  -moz-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.passport-txt[readonly="readonly"],
.passport-txt[readonly="readonly"]:hover,
.passport-txt[readonly="readonly"]:focus {
  border-color: #e4e4e4 !important;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.passport-txt:hover {
  border-color: #cccccc;
  -webkit-box-shadow: 0 0 5px #ffffff;
  box-shadow: 0 0 5px #ffffff;
}
.passport-txt:focus {
  border-color: #35b558;
  -webkit-box-shadow: 0 0 5px #51cc73;
  box-shadow: 0 0 5px #51cc73;
}
/* text radius */
.passport-txt.txt-radius {
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
}
/* text height */
.passport-txt.xl {
  height: 40px;
  padding: 11px 11px;
  font-size: 14px;
  line-height: 18px;
}
/* text width */
.passport-txt.w-lg {
  width: 100%;
}
.passport-txt.w-full {
  width: 100%;
}
/* tel text */
/* tel height*/
/* txt section */
/* file */
/* select */
/* select height */
/* select width */
/* textarea */
/* icon */
.passport-icon {
  display: inline-block;
  vertical-align: middle;
  background-repeat: no-repeat;
}
.passport-tab > .tabs ul:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-tab > .tabs li {
  float: left;
  cursor: pointer;
}
.passport-tab > .tabbed > .tab-group {
  display: none;
}
.passport-popup {
  -webkit-text-size-adjust: 100%;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  /* checkbox & radio */
  /* 18x18 */
  /* 32x32 */
  /* 38x38 */
  /* 48x48 */
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 990;
  padding: 40px;
  background: #fff;
  color: #999999;
  font: normal 12px/1.4 Verdana, "Lantinghei SC", "Hiragino Sans GB", 'Microsoft YaHei', Helvetica, arial, simsun, sans-serif;
  line-height: 1.4;
}
.passport-popup *,
.passport-popup *:after,
.passport-popup *:before {
  -webkit-box-sizing: inherit;
  -moz-box-sizing: inherit;
  box-sizing: inherit;
}
.passport-popup button,
.passport-popup input,
.passport-popup select,
.passport-popup textarea {
  color: inherit;
  font-family: inherit;
  font-size: 100%;
  font-weight: inherit;
}
.passport-popup label {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  cursor: pointer;
}
.passport-popup h2,
.passport-popup h3 {
  font-size: 100%;
}
.passport-popup ul {
  list-style: none;
  padding-left: 0px;
}
.passport-popup img {
  vertical-align: middle;
  border: 0;
}
.passport-popup input,
.passport-popup button {
  outline: 0;
}
.passport-popup a {
  color: #35b558;
  text-decoration: none;
}
.passport-popup a:hover {
  color: #51cc73;
  text-decoration: none;
}
.passport-popup input,
.passport-popup button,
.passport-popup .passport-btn,
.passport-popup select,
.passport-popup textarea {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.passport-popup input,
.passport-popup button,
.passport-popup .passport-btn,
.passport-popup select,
.passport-popup label {
  vertical-align: middle;
}
.passport-popup button,
.passport-popup input[type="button"],
.passport-popup input[type="submit"],
.passport-popup input[type="reset"] {
  line-height: normal !important;
  cursor: pointer;
}
.passport-popup input[type="checkbox"],
.passport-popup input[type="radio"] {
  width: 13px;
  height: 13px;
  margin: 0 5px 0 2px;
  cursor: pointer;
}
.passport-popup input[type="checkbox"][disabled],
.passport-popup input[type="radio"][disabled],
.passport-popup input[type="checkbox"][disabled]:hover,
.passport-popup input[type="radio"][disabled]:hover,
.passport-popup input[type="checkbox"][disabled]:focus,
.passport-popup input[type="radio"][disabled]:focus,
.passport-popup input[type="checkbox"][disabled]:active,
.passport-popup input[type="radio"][disabled]:active {
  cursor: default !important;
  cursor: not-allowed !important;
}
.passport-popup .icon-refresh {
  width: 18px;
  height: 18px;
  background-position: 0 -38px;
}
.passport-popup .icon-phone,
.passport-popup .icon-letter {
  width: 32px;
  height: 32px;
  background-position: -49px -58px;
}
.passport-popup .icon-letter {
  background-position: -83px -58px;
}
.passport-popup .icon-tencent,
.passport-popup .icon-weibo,
.passport-popup .icon-weixin,
.passport-popup .icon-eoe {
  width: 55px;
  height: 55px;
  background-position: 0 -65px;
}
.passport-popup a:hover .icon-tencent {
  background-position: 0 -1px;
}
.passport-popup .icon-weibo {
  background-position: -81px -65px;
}
.passport-popup a:hover .icon-weibo {
  background-position: -81px -1px;
}
.passport-popup .icon-weixin {
  background-position: -162px -65px;
}
.passport-popup a:hover .icon-weixin {
  background-position: -162px -1px;
}
.passport-popup .icon-eoe {
  background-position: -243px -65px;
}
.passport-popup a:hover .icon-eoe {
  background-position: -243px -1px;
}
.passport-popup .icon-success {
  width: 48px;
  height: 48px;
  background-position: 0 -58px;
}
.passport-popup:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-popup .close {
  position: absolute;
  top: 10px;
  right: 10px;
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  cursor: pointer;
  background: url("//sp1.jikexueyuan.com/static/images/popup_def_close.png") no-repeat center center / 14px 14px;
}
.passport-popup > .layout-inner {
  position: relative;
  float: left;
  width: 100%;
  height: 100%;
  background: #fff;
}
.passport-popup > .layout-inner > .hd {
  height: 40px;
  padding: 0 30px 0 8px;
  line-height: 40px;
  cursor: default ;
}
.passport-popup > .layout-inner > .hd h2 {
  color: #000;
  width: 300px;
  float: left;
  margin: 0px;
  display: inline-block;
  font-size: 18px;
  font-weight: normal;
}
.passport-popup > .layout-inner > .hd p {
  font-size: 12px;
  color: #999;
  margin-top: 10px;
}
#warning {
  position: fixed;
  top: -40px;
  left: 50%;
  z-index: 60000;
  opacity: 0;
  padding: 4px 20px;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
  font-size: 16px;
  font-weight: 400;
  color: #fff;
  text-align: center;
}
.waring-success {
  background: #35b558;
}
.waring-failure {
  background: #ff5c00;
}
.waring-sub {
  background: #2d85ca;
}
.passport-step {
  padding: 8px 6px;
}
.passport-step li {
  position: relative;
  top: 0;
  left: 0;
  float: left;
  width: 100px;
  margin-left: 90px;
  padding-top: 35px;
  text-align: center;
}
.passport-step li.first {
  margin-left: 0;
}
.passport-step li .disc {
  position: absolute;
  top: 0;
  left: 50%;
  z-index: 20;
  display: block;
  width: 30px;
  height: 30px;
  margin-left: -15px;
  background-color: #b9b9b9;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  color: #fff;
  font: 16px/30px arial;
  cursor: default;
}
.passport-step li .strip {
  position: absolute;
  top: 13px;
  left: -120px;
  z-index: 10;
  display: block;
  width: 150px;
  height: 3px;
  background-color: #b9b9b9;
}
.passport-step p {
  color: #666;
  font-size: 14px;
  line-height: 18px;
  text-align: center;
  white-space: nowrap;
}
.passport-step .now .disc,
.passport-step .now .strip,
.passport-step .past .disc,
.passport-step .past .strip {
  background-color: #35b558;
}
.passport-safely {
  margin-top: 10px;
}
.passport-safely li {
  float: left;
  width: 60px;
  height: 14px;
  margin-right: 4px;
  background-color: #ddd;
  color: #fff;
  font-size: 12px;
  line-height: 14px;
  text-align: center;
  cursor: default;
}
.passport-safely.safely-danger .danger {
  background-color: #da4619;
}
.passport-safely.safely-general .danger,
.passport-safely.safely-general .general {
  background-color: #ff5c00;
}
.passport-safely.safely-safe li {
  background-color: #35b558;
}
.clearfix:after,
.passport-step:after,
.passport-safely:after,
.passport-sign:after,
.passport-form .form-imgcode .form-cont:after {
  display: table;
  clear: both;
  content: " ";
}
.passport-icon {
  background-image: url("//sp1.jikexueyuan.com/static/images/fouricon.png");
  background-size: 298px 120px;
}
.passport-icon2 {
  background-image: url("//sp1.jikexueyuan.com/static/images/passport.png");
  background-size: 155px 106px;
}
.passport-sign {
  /*  height: 400px;*/
  /*padding: 25px 0 0 0;*/
  background-color: #fff;
}
.passport-sign .main-form,
.passport-sign .aside {
  float: left;
  /*  padding: 0 25px;*/
}
#register-popup .main-form {
  width: 385px;
  border-right: 2px solid #fafafa;
  padding-right: 20px;
}
#login-popup .main-form {
  width: 370px;
}
.passport-sign .main-form h2 {
  color: #333;
  margin-bottom: 20px;
  font-size: 20px;
  font-weight: normal;
  line-height: 20px;
}
/*.passport-sign .main-form.main-form-sign {
  min-height: 350px;
}*/
.passport-sign .aside {
  width: 290px;
}
.LoginAndRegister-Mask .passport-sign .passport-goto {
  margin-bottom: 10px;
  padding-top: 10px;
  padding-left: 20px;
  color: #999;
  font-size: 16px;
}
.passport-sign .passport-third .hd {
  height: 16px;
  font-size: 12px;
  text-align: center;
  width: 240px;
  margin: 0 auto;
}
.passport-sign .passport-third .hd .layout-inner {
  margin-bottom: 7px;
  border-bottom: 2px solid #f2f2f2;
}
.layout-inner .quikely {
  border-bottom: 1px solid #e4e4e4;
  text-align: center;
  height: 10px;
  margin: 15px 0 10px 0;
}
.layout-inner .quikely span {
  padding: 5px;
  background: #fff;
}
/*.passport-sign .passport-third .hd .layout-inner h3 {
  font-size: 18px;
  width: 300px;
  float: left;
}*/
.passport-sign .passport-third .hd h3 {
  width: 106px;
  margin: 0 auto -8px;
  background-color: #fff;
  font-weight: 400;
  line-height: 16px;
}
.passport-popup .links {
  margin: 0 auto;
  padding-top: 20px;
  text-align: center;
}
.passport-popup .links a {
  display: inline-block;
  margin: 0 8px;
}
.passport-popup .links a:last-child {
  margin-right: 0;
}
/*.passport-sign .passport-ad {
  width: 240px;
  height: 60px;
  margin-top: 80px;
}*/
.passport-sign .passport-tab .tabs {
  margin-bottom: 15px;
}
.passport-sign .passport-tab .tabs ul {
  border-bottom: 2px solid #e4e4e4;
}
.passport-sign .passport-tab .tabs li {
  float: left;
  width: 50%;
  height: 32px;
  margin-bottom: -2px;
  text-align: center;
  font-size: 16px;
}
.passport-sign .passport-tab .tabs li.active {
  color: #35b558;
  border-bottom: 2px solid #35b558;
}
.passport-form .form-item {
  margin-bottom: 12px;
}
.passport-form .form-cont {
  position: relative;
  line-height: 26px;
}
.passport-form .js-placeholder {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  height: 40px;
  padding: 11px;
  font-size: 12px;
  line-height: 18px;
  text-align: left;
}
.passport-form .passport-txt {
  position: relative;
  z-index: 10;
  color: #666;
  font-size: 12px;
}
.passport-form .passport-txt.placeholder {
  background-color: rgba(0, 0, 0, 0);
}
.passport-form .passport-note {
  position: absolute;
  top: 0;
  right: 0;
  height: 40px;
  z-index: 20;
  padding: 0;
  background-color: rgba(0, 0, 0, 0);
  color: #fff;
  line-height: 26px;
}
.passport-form .passport-note span {
  display: block;
  height: 26px;
  margin: 7px 7px 0 0;
  padding: 0 5px;
  background-color: #ff5c00;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
}
.passport-form .form-imgcode .layout-inner3 {
  position: relative;
  float: left;
  width: 100%;
}
.passport-form .form-imgcode .layout-inner {
  position: relative;
  float: left;
  width: 240px;
}
.passport-form .form-imgcode .imgcode {
  float: right;
}
.passport-form .form-imgcode .imgcode img {
  width: 100px;
  height: 40px;
  cursor: pointer;
}
.passport-form .form-imgcode .imgcode .passport-icon {
  cursor: pointer;
}
.passport-form .form-mcode .btn-getcode {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 20;
}
.passport-form .form-mcode .btn-getcode .passport-btn {
  text-overflow: initial;
  width: 90px;
  height: 26px;
  margin: 7px 7px 0 0;
  padding: 0;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
}
.passport-form .form-mcode .passport-note {
  right: 97px;
}
.passport-form .passport-sms {
  position: absolute;
  top: 100%;
  left: 0;
}
.passport-form .passport-sms a {
  color: #2d85ca;
}
.passport-form .passport-sms a:hover {
  color: #529dd8;
}
.passport-form .passport-sms a.disabled,
.passport-form .passport-sms a.disabled:hover {
  color: #999;
}
.passport-form-sign .form-treaty .passport-note span {
  margin: 0;
}
.passport-form-sign .form-treaty .form-cont {
  line-height: 20px;
}
.passport-form-sign .treaty {
  color: #999;
}
.passport-form-sign .treaty:hover {
  color: #35b558;
}
.passport-form-sign .form-sevenday label {
  float: left;
}
.passport-form-sign .form-sevenday .forget-link {
  float: right;
  color: #999;
}
.passport-form-sign .form-sevenday .forget-link:hover {
  color: #35b558;
}
.passport-forget {
  padding: 25px 0;
  background-color: #fff;
  min-height: 400px;
}
.passport-forget .passport-into {
  padding-top: 95px;
}
.passport-forget .passport-into .passport-btn {
  display: block;
  width: 250px;
  height: 54px;
  margin: 0 auto 50px;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border-radius: 2px;
  font-size: 16px;
  text-align: left;
  line-height: 52px;
}
.passport-forget .passport-into .passport-btn .passport-icon {
  margin-right: 25px;
}
.passport-forget .passport-step {
  margin: 40px auto 20px;
  width: 492px;
}
.passport-forget .passport-form {
  width: 300px;
  margin-right: auto;
  margin-left: auto;
}
.passport-forget .passport-form .form-submit {
  margin-top: 30px;
}
.passport-forget .passport-form .form-item {
  margin-bottom: 18px;
}
.passport-form-email .form-text,
.passport-form-phone .form-text,
.passport-form-email .form-code-text,
.passport-form-phone .form-code-text {
  width: 500px;
  margin: 0 -100px;
  text-align: center;
}
.passport-form-email .form-text p,
.passport-form-phone .form-text p,
.passport-form-email .form-code-text p,
.passport-form-phone .form-code-text p {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  margin-bottom: 20px;
}
.passport-form-email .form-text big,
.passport-form-phone .form-text big,
.passport-form-email .form-code-text big,
.passport-form-phone .form-code-text big {
  font-size: 14px;
}
.passport-form-email .form-email,
.passport-form-phone .form-email {
  font-size: 14px;
}
.passport-form-email .form-email p,
.passport-form-phone .form-email p {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.passport-form-email .form-email em,
.passport-form-phone .form-email em {
  color: #35b558;
}
.passport-form-phone .form-code-text {
  position: relative;
  width: 100%;
  margin: 0;
  text-align: left;
}
.passport-form-phone .form-code-text .passport-icon {
  position: absolute;
  right: 0;
  left: 0;
  margin-left: -60px;
}
.passport-form-phone .passport-voice {
  color: #2d85ca;
}
.passport-form-phone .passport-voice:hover {
  color: #529dd8;
}
.mb-25 {
  margin-bottom: 25px !important;
}
.passport-popup .close-event {
  position: absolute;
  top: 10px;
  right: 10px;
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  cursor: pointer;
  background: url("//sp1.jikexueyuan.com/static/images/popup_def_close.png") no-repeat center center / 14px 14px;
}
.hide {
  display: none;
}
.passport-popup .regphone {
  font-size: 16px;
  text-align: center;
  color: #000;
  margin-top: 30px;
}
.passport-popup .regphone a:hover {
  text-decoration: underline;
}
.passport-popup .getfreevideo {
  margin-top: 10px;
  font-size: 14px;
  text-align: center;
  color: #000;
}
#register-registe-bindPhone {
  border-top: 5px solid #35B558;
}
#registe-bindPhone .instructions {
  display: block;
  margin: 20px 0 20px 0;
  padding: 10px 0;
  color: #000;
  border-top: 1px solid #35B558;
  border-bottom: 1px solid #35B558;
  font-size: 14px;
  line-height: 22px;
}
.passport-popup .phonedtm {
  display: block;
  text-align: right;
  margin: 30px 0px 10px 0px;
  color: #999;
}
.passport-popup .phonedtm i {
  float: right;
  width: 15px;
  height: 15px;
  display: inline-block;
  overflow: hidden;
  background: url("//sp1.jikexueyuan.com/static/images/feg-icon.png");
  background-position: -15px 0px;
  background-size: 30px 30px;
}
.passport-popup .phonedtm:hover i {
  background-position: -15px -15px;
}
#verifyId {
  box-sizing: content-box;
}
.nc-error-txt {
  color: #ff5c00;
  text-align: right;
  line-height: 34px;
}
.reg_pop_python {
  width: 280px;
  height: 100px;
  margin-bottom: 20px;
  margin-left: 20px;
}
</style><style>@charset "utf-8";
@font-face{font-family:'nc_iconfont';src:url("//at.alicdn.com/t/font_1465353706_4784257.eot");src:url("//at.alicdn.com/t/font_1465353706_4784257.eot?#iefix") format('embedded-opentype'),url("//at.alicdn.com/t/font_1465353706_4784257.woff") format('woff'),url("//at.alicdn.com/t/font_1465353706_4784257.ttf") format('truetype'),url("//at.alicdn.com/t/font_1465353706_4784257.svg#iconfont") format('svg')}@font-face{font-family:'ncpc_iconfont';src:url("//at.alicdn.com/t/font_384029_rhzpmteb25oecdi.eot");src:url("//at.alicdn.com/t/font_384029_rhzpmteb25oecdi.eot?#iefix") format('embedded-opentype'),url("//at.alicdn.com/t/font_384029_rhzpmteb25oecdi.woff") format('woff'),url("//at.alicdn.com/t/font_384029_rhzpmteb25oecdi.ttf") format('truetype'),url("//at.alicdn.com/t/font_384029_rhzpmteb25oecdi.svg#ncpc_iconfont") format('svg')}.nc-container div#nc-loading-circle{background:transparent;width:20px;height:20px;display:inline-block;position:relative;vertical-align:middle}.nc-container div#nc-loading-circle .sk-circle{background:transparent;width:100%;height:100%;position:absolute;left:0;top:0}.nc-container #nc-loading-circle .sk-circle:before{content:'';display:block;margin:0 auto;width:15%;height:15%;background-color:#818181;border-radius:100%;-webkit-animation:sk-circleFadeDelay 1.2s infinite ease-in-out both;animation:sk-circleFadeDelay 1.2s infinite ease-in-out both}.nc-container #nc-loading-circle .sk-circle2{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);transform:rotate(30deg)}.nc-container #nc-loading-circle .sk-circle3{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg)}.nc-container #nc-loading-circle .sk-circle4{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nc-container #nc-loading-circle .sk-circle5{-webkit-transform:rotate(120deg);-ms-transform:rotate(120deg);transform:rotate(120deg)}.nc-container #nc-loading-circle .sk-circle6{-webkit-transform:rotate(150deg);-ms-transform:rotate(150deg);transform:rotate(150deg)}.nc-container #nc-loading-circle .sk-circle7{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.nc-container #nc-loading-circle .sk-circle8{-webkit-transform:rotate(210deg);-ms-transform:rotate(210deg);transform:rotate(210deg)}.nc-container #nc-loading-circle .sk-circle9{-webkit-transform:rotate(240deg);-ms-transform:rotate(240deg);transform:rotate(240deg)}.nc-container #nc-loading-circle .sk-circle10{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.nc-container #nc-loading-circle .sk-circle11{-webkit-transform:rotate(300deg);-ms-transform:rotate(300deg);transform:rotate(300deg)}.nc-container #nc-loading-circle .sk-circle12{-webkit-transform:rotate(330deg);-ms-transform:rotate(330deg);transform:rotate(330deg)}.nc-container #nc-loading-circle .sk-circle2:before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.nc-container #nc-loading-circle .sk-circle3:before{-webkit-animation-delay:-1s;animation-delay:-1s}.nc-container #nc-loading-circle .sk-circle4:before{-webkit-animation-delay:-.9s;animation-delay:-.9s}.nc-container #nc-loading-circle .sk-circle5:before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.nc-container #nc-loading-circle .sk-circle6:before{-webkit-animation-delay:-.7s;animation-delay:-.7s}.nc-container #nc-loading-circle .sk-circle7:before{-webkit-animation-delay:-.6s;animation-delay:-.6s}.nc-container #nc-loading-circle .sk-circle8:before{-webkit-animation-delay:-.5s;animation-delay:-.5s}.nc-container #nc-loading-circle .sk-circle9:before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.nc-container #nc-loading-circle .sk-circle10:before{-webkit-animation-delay:-.3s;animation-delay:-.3s}.nc-container #nc-loading-circle .sk-circle11:before{-webkit-animation-delay:-.2s;animation-delay:-.2s}.nc-container #nc-loading-circle .sk-circle12:before{-webkit-animation-delay:-.1s;animation-delay:-.1s}@-webkit-keyframes sk-circleFadeDelay{0%,39%,100%{opacity:0}40%{opacity:1}}@-webkit-keyframes sk-circleFadeDelay{0%,39%,100%{opacity:0}40%{opacity:1}}@keyframes sk-circleFadeDelay{0%,39%,100%{opacity:0}40%{opacity:1}}.nc-container .scale_text2 #nc-loading-circle .sk-circle:before{background-color:#fff}.nc_iconfont{font-family:"nc_iconfont";color:#ff3f08;font-size:16px;font-style:normal}.ncpc_iconfont{font-family:"ncpc_iconfont";color:#ff3f08;font-size:16px;font-style:normal}.captcha-error .icon_ban{float:left;font-size:16px;padding-right:5px;line-height:14px}.clickCaptcha_text .btn_refresh{font-style:normal;cursor:pointer;background:#fff;color:#737383}.imgCaptcha .btn_refresh{font-size:20px;cursor:pointer;background:#fff;color:#737383}.nc_voice{display:none;position:relative;margin-top:-34px;z-index:99;width:auto;height:34px;background:#fff}.omeo-code-img,.omeo-code-audio{font-size:0;text-align:left}.omeo-code-audiobox,.omeo-code-img a,.omeo-code-audio a,.omeo-code-state{display:inline-block;*display:inline;zoom:1;height:32px;vertical-align:top;font-size:12px}.omeo-code .omeo-code-refresh{background:transparent;width:32px;height:32px;font-size:20px;color:#888;text-align:center;text-decoration:none;padding-left:4px;line-height:32px}.omeo-code .omeo-switch{display:none;width:32px;height:32px;border-left:1px solid #e1e1e1;background-image:url("//g.alicdn.com/sd/ncpc/images/checkcode.png");background-repeat:no-repeat}.omeo-img-active .omeo-code-img{display:block}.omeo-img-active .omeo-code-audio{display:none}.omeo-code-img img{border:1px solid #cdcdcd;cursor:pointer}.omeo-code-img .omeo-switch{background-position:9px -41px}.omeo-audio-active .omeo-code-audio{display:block}.omeo-audio-active .omeo-code-img{display:none}.omeo-code-refresh{position:relative;left:95px}.omeo-code-audiobox{position:relative;height:30px;line-height:32px;border:1px solid #e1e1e1;text-align:center;overflow:hidden;left:100px;top:1px;width:45%;min-width:80px;background-color:#eee}.omeo-code-audiobox a{display:block;text-decoration:none;color:#06c}.omeo-code-audiobox-playing a{visibility:hidden}.omeo-code-audiobox span,.omeo-code-audiobox b{visibility:hidden;position:absolute;top:0;left:0;height:30px;font-weight:100;overflow:hidden}.omeo-code-audiobox-playing span,.omeo-code-audiobox-playing b{visibility:visible}.omeo-code-audiobox span{z-index:0;width:0;background:#186bca}.omeo-code-audiobox b{width:100%;z-index:1;text-align:left;text-indent:30px;color:#999;background:url("//g.alicdn.com/sd/ncpc/images/checkcode.png") no-repeat 14px -89px}.omeo-code-audio .omeo-switch{background-position:5px 10px}input[type=text]::-ms-clear{display:none}.omeo-box{position:relative;background-color:#fff}.omeo-code-echo{position:absolute;top:2px;left:2px}.omeo-code-echo input{padding:5px;height:18px;line-height:18px;border:1px solid #ddd;width:80px;outline:0}.omeo-code-state{height:30px;line-height:30px;text-indent:25px;white-space:nowrap;background-image:url("//g.alicdn.com/sd/ncpc/images/checkcode.png");background-repeat:no-repeat;background-position:100px 100px}.omeo-code-echo .omeo-code-state-error{width:auto;background-position:7px -193px}.omeo-code-echo .omeo-code-state-success{position:absolute;width:30px;background-position:7px -243px}.omeo-code-state{position:absolute;left:0;top:28px}.nc_voice_close{display:inline-block;position:relative;cursor:pointer;left:95px;top:0;border-left:#ddd 2px solid;padding:0 0 0 7px;background-color:#fff;font-size:20px;color:#888;line-height:32px}.nc_help{position:absolute;width:100%;height:100%;left:0;top:0;z-index:99999}.nc_help .mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);width:100%;height:100%;top:0;left:0}.nc_btn_close{position:absolute;height:20px;left:500px;border-radius:20px;padding:10px 30px;background-color:#aaa;color:#fff;cursor:pointer;z-index:10}.nc_btn_close:hover{background-color:#afafaf}.nc_hand{position:absolute;width:68px;height:53px;background-image:url("//g.alicdn.com/sd/ncpc/images/hand.png");z-index:3}.nc_slide_bg{z-index:3;font-size:12px;text-align:center;color:#fff;line-height:34px}.nc_voicebtn{position:absolute;padding:0;right:-25px;font-size:23px;color:#888;cursor:pointer;line-height:34px}.nc_helpbtn{position:absolute;cursor:pointer;right:-95px;top:4px;font-size:12px;background-color:#ffb668;color:#fff;padding:4px;border-radius:2px;line-height:18px;display:none}.nc_helpbtn:before{width:0;height:0;content:"";position:absolute;left:-2px;top:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:4px solid #ffb668}.nc-container .errloading{border:#faf1d5 1px solid;text-indent:3px;background-image:none;font-size:12px;width:290px;line-height:20px;padding:7px 5px 8px 5px;color:#ef9f06;}.nc-container .errloading a{color:#30a7fc}.nc_captcha_text .nc_err{float:left;text-indent:0}.button_move{transition:left .5s;-moz-transition:left .5s;-webkit-transition:left .5s;-o-transition:left .5s}.bg_move{transition:width .5s;-moz-transition:width .5s;-webkit-transition:width .5s;-o-transition:width .5s}.nc_slide_box{position:absolute}.nc_captcha_text{height:auto;line-height:20px;visibility:hidden;font-size:12px;color:#999;font-weight:normal}.nc-container .nc_captcha_img_text{width:auto;height:auto;line-height:20px;visibility:hidden;font-size:12px;color:#999;font-weight:normal;display:none;padding:0 0 10px 0;background-position:0 0;}.nc-container .nc_captcha_img_text span.nc-lang-cnt{line-height:inherit}.nc-container .imgCaptcha .nc_captcha_img_text{width:auto}.nc_captcha_img_text{height:auto;line-height:20px;visibility:hidden;font-size:12px;color:#999;font-weight:normal;display:none;padding:0 0 10px 3px;background-position:0 0}.nc-container .nc_wrapper{width:auto}.nc_scale{width:auto;height:34px;background:#e8e8e8;position:relative;margin:0;padding:0}.nc_scale.is_audio{margin-right:25px}.nc-container .nc_scale div{height:auto}.nc-container .nc_scale ul{list-style:none}.nc-container .nc_scale .btn_slide{color:#737383;background-image:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.nc-container .nc_scale span{text-align:center;width:40px;height:32px;line-height:32px;border:1px solid #ccc;position:absolute;left:0;cursor:move;background:#fff;z-index:2}.nc-container .nc_scale span.nc-lang-cnt{*line-height:34px;float:none;width:auto;height:auto;*height:34px;border:none;position:static;cursor:inherit;background:none;z-index:0;display:inline}.nc_slide_button{width:40px;height:32px;border:1px solid #ccc;position:absolute;left:0;cursor:move;background:#fff url("//g.alicdn.com/sd/ncpc/images/rt.png") no-repeat center;z-index:2}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.nc_scale span{height:32px}}.nc-container .nc_scale .btnok{cursor:default;background:#fff url("//g.alicdn.com/sd/ncpc/images/yes.png") no-repeat center;z-index:3}.nc-container .nc_scale .btnok2{cursor:default;font-size:20px;background:#fff url("//g.alicdn.com/sd/ncpc/images/no.png") no-repeat center;z-index:3}.nc-container .nc_scale .btn_warn{cursor:default;color:#ff3f08;line-height:34px;text-align:center;font-size:20px;background:#fff;z-index:3}.nc-container .clickCaptcha_text .btn_refresh{font-size:20px}.nc-container .clickCaptcha_text .icon_close{line-height:30px;margin-left:8px;cursor:default;color:#ff3f08;font-size:16px;float:left;margin-right:2px;background:transparent;z-index:3}.nc-container .nc_captcha_img_text .icon_close{cursor:default;color:#ff3f08;font-size:16px;float:left;margin-right:4px;background:transparent;z-index:3;line-height:18px}.nc-container .errloading .icon_warn{cursor:default;color:#ff3f08;font-size:18px;float:left;background:transparent;z-index:3}.nc-container .nc_scale .btn_ok{cursor:default;line-height:34px;text-align:center;font-size:20px;background:#fff;z-index:3;color:#76c61d}.nc-container .nc_scale .nc_ok,.nc-container .nc_scale .nc_bg{background:#7ac23c}.nc-container .nc_scale .nc_bg{position:absolute;height:100%;_height:34px;left:0;width:10px}.nc-container .nc_scale div.redbar{background:#fc461e;opacity:.5;filter:alpha(opacity=50)}.nc-container .nc_scale div.orange{background:#f00}.nc-container .nc_scale .scale_text{width:100%;height:100%;text-align:center;position:absolute;z-index:1;background:transparent;color:#9c9c9c;line-height:34px;font-size:12px;cursor:pointer}.nc-container .nc_scale .scale_text2{text-align:left;color:#fff;font-size:12px;text-indent:10px}.nc-container .nc_scale .scale_text2 b{padding-left:0;font-weight:normal}.nc-container .nc_scale .scale_text.scale_loading_text{text-align:center}.nc-container .nc_scale .imgCaptcha,.nc-container .nc_scale .clickCaptcha{display:none;overflow:hidden;border:1px solid #ccc;background:#fff;z-index:20000;}.nc-container .nc_scale .imgCaptcha p.error span,.nc-container .nc_scale .clickCaptcha p.error span{line-height:normal}.nc-container .nc_scale .imgCaptcha{height:auto}.nc-container .nc_scale .clickCaptcha{position:absolute;left:0;top:35px;height:270px;background:#fff;display:none;}.nc-container .nc_scale .clickCaptcha p.error i{color:#ff3f08;font-style:normal}.nc-container .nc_scale .clickCaptcha div{position:static;clear:both;width:100%;background:#fff;height:auto}.nc-container .nc_scale .clickCaptcha .clickCaptcha_text{height:30px;line-height:30px;font-size:12px;color:#999;}.nc-container .nc_scale .clickCaptcha .clickCaptcha_text b{font-weight:normal}.nc_btn_2{position:absolute;right:0;top:0;cursor:pointer;margin:2px 9px 0 0}.nc_iconfont.nc_btn_2{position:absolute;right:0;top:0;cursor:pointer}.nc_iconfont.nc_btn_1{position:absolute;top:10px;right:5px}.nc_btn_1{top:10px;right:10px}.scale_text i{font-style:normal;border:none;position:static;cursor:default;color:#fffc00;background:none;display:inline;width:100%}.nc-container .clickCaptcha .clickCaptcha_img{margin:0 auto;clear:both;position:relative;}.nc-container .clickCaptcha .clickCaptcha_img img{width:230px;height:230px;margin-left:10px;margin-top:5px}.nc-container .clickCaptcha .clickCaptcha_btn{margin:10px 0 0 15px;position:relative;text-align:left;}.nc-container .clickCaptcha .clickCaptcha_btn img{cursor:pointer}.nc-container .imgCaptcha{position:absolute;left:0;top:35px;height:auto;padding-bottom:15px;border:1px solid #ccc;background:#fff;}.nc-container .imgCaptcha div{position:static;width:90%;background-color:#fff}.nc-container .imgCaptcha,.nc-container .clickCaptcha{text-align:left;}.nc-container .imgCaptcha a,.nc-container .clickCaptcha a{color:#ff3f08}.nc-container .imgCaptcha .imgCaptcha_text{height:42px;line-height:42px;width:120px;background:#fff;font-size:14px;text-align:left;color:#747474;float:left;margin-left:10px;}.nc-container .imgCaptcha .imgCaptcha_text input{margin-top:5px;height:30px;line-height:30px;font-size:14px;width:90px;background:#fff}.nc-container .imgCaptcha .imgCaptcha_text input:focus{outline:none;color:#bbb}.nc-container .imgCaptcha .imgCaptcha_btn{margin:0 0 0 12px;*margin-left:0;clear:both;padding-top:5px;width:90%;}.nc-container .imgCaptcha .imgCaptcha_btn img{cursor:pointer}.nc-container .imgCaptcha .nc_scale_submit{margin:0 auto;cursor:pointer;background-color:#fc461e;width:120px;height:32px;line-height:32px;color:#fff;text-align:center}.nc-container .imgCaptcha .imgCaptcha_img{margin:4px 0 0 100px;height:40px;width:130px;overflow:hidden;cursor:pointer;}.nc-container .imgCaptcha .imgCaptcha_img img{width:130px}.nc-container .imgCaptcha .imgCaptcha_img input{border:solid 1px #ccc}.nc-lang-ar_MA,.nc-lang-ar_SA,.nc-lang-iw_HE,.nc-lang-iw_IL{text-align:right;*text-align:left;}.nc-lang-ar_MA .nc_scale .scale_text2,.nc-lang-ar_SA .nc_scale .scale_text2,.nc-lang-iw_HE .nc_scale .scale_text2,.nc-lang-iw_IL .nc_scale .scale_text2{text-align:right;}.nc-lang-ar_MA .nc_scale .scale_text2 span,.nc-lang-ar_SA .nc_scale .scale_text2 span,.nc-lang-iw_HE .nc_scale .scale_text2 span,.nc-lang-iw_IL .nc_scale .scale_text2 span{*display:inline-block;padding:0 56px 0 0}.nc-lang-ar_MA .nc_captcha_img_text,.nc-lang-ar_SA .nc_captcha_img_text,.nc-lang-iw_HE .nc_captcha_img_text,.nc-lang-iw_IL .nc_captcha_img_text{*text-align:right}.nc-lang-ar_MA span.nc-lang-cnt,.nc-lang-ar_SA span.nc-lang-cnt,.nc-lang-iw_HE span.nc-lang-cnt,.nc-lang-iw_IL span.nc-lang-cnt{text-align:right;direction:rtl}.nocaptcha span.nc-lang-cnt{float:none;height:auto;line-height:30px}.nc-container{font-size:12px;-ms-touch-action:none;touch-action:none;}.nc-container p{margin:0;padding:0;display:inline}.nc-container .scale_text.scale_text span[data-nc-lang="_startTEXT"]{display:inline-block;width:100%}.nc-container .scale_text.scale_text.slidetounlock span[data-nc-lang="_startTEXT"]{background:-webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),color-stop(1,#4d4d4d));-webkit-background-clip:text;-webkit-text-fill-color:transparent;-webkit-animation:slidetounlock 3s infinite;-webkit-text-size-adjust:none}.nc-container .nc_scale .nc-align-center.scale_text2{text-align:center;text-indent:-42px}@-webkit-keyframes slidetounlock{0%{background-position:-200px 0}100%{background-position:200px 0}}.nc-container.tb-login .clickCaptcha_text .icon_close{line-height:30px;margin-left:0;cursor:default;color:#ff3f08;font-size:16px;float:left;margin-right:0;background:transparent;z-index:3}.nc-container.tb-login{position:relative;margin-top:20px;display:none;}.nc-container.tb-login .nc_scale{width:auto;}.nc-container.tb-login .nc_scale .scale_text2{text-indent:-42px;text-align:center;}.nc-container.tb-login .nc_scale .scale_text2 b{padding:0}.nc-container.tb-login .nc_scale.nc_err div.scale_text{background:#f79977}.nc-container.tb-login .errloading{width:auto}.nc-container.tb-login .imgCaptcha,.nc-container.tb-login .clickCaptcha{width:252px;*width:256px;border:0;*height:300px;min-height:300px;max-height:inherit !important;}.nc-container.tb-login .imgCaptcha div.login-msg.error,.nc-container.tb-login .clickCaptcha div.login-msg.error{background:#fff2f2}.nc-container.tb-login .imgCaptcha .captcha-error,.nc-container.tb-login .clickCaptcha .captcha-error{position:absolute;top:0;width:244px;height:auto;margin-bottom:15px;padding:3px;border:solid 1px #ff8e8e;line-height:18px}.nc-container.tb-login .imgCaptcha .captcha-inform,.nc-container.tb-login .clickCaptcha .captcha-inform{font-size:110%;margin-left:20px}.nc-container.tb-login .imgCaptcha{padding-top:66px;}.nc-container.tb-login .imgCaptcha .imgCaptcha_text{width:100px;margin-left:0;}.nc-container.tb-login .imgCaptcha .imgCaptcha_text input:focus{color:#000}.nc-container.tb-login .imgCaptcha .imgCaptcha_img{width:120px;_width:100px}.nc-container.tb-login .imgCaptcha .imgCaptcha_btn{width:100%;margin-left:0}.nc-container.tb-login .imgCaptcha .nc_scale_submit{width:100%;height:36px;line-height:36px;margin-top:20px;margin-left:0;border-radius:3px;font-size:16px;font-family:Tahoma,Helvetica,Arial,sans-serif;background:#ff3f08}.nc-container.tb-login .clickCaptcha{padding-top:40px;}.nc-container.tb-login .clickCaptcha .clickCaptcha_text{text-indent:4px}.nc-container.tb-login .clickCaptcha .clickCaptcha_img img{margin-left:10px}.nc-container.tb-login .nc_btn_1{top:77px;_top:57px}.nc-container.tb-login .nc_btn_2{top:36px}.login .nc-container.tb-login .login-msg p,.login-box .nc-container.tb-login .login-msg p{width:auto;float:left}.nc-container.tb-login.nc-old-login{margin:20px 0 10px 0;width:250px;}.nc-container.tb-login.nc-old-login .nc_wrapper{width:250px}.nc-container.tb-login.nc-old-login .imgCaptcha,.nc-container.tb-login.nc-old-login .clickCaptcha{width:250px;min-height:auto;}.nc-container.tb-login.nc-old-login .imgCaptcha .captcha-error,.nc-container.tb-login.nc-old-login .clickCaptcha .captcha-error{line-height:16px}.nc-container.tb-login.nc-old-login .clickCaptcha{padding-top:28px;}.nc-container.tb-login.nc-old-login .clickCaptcha .clickCaptcha_img img{width:200px;height:200px}.nc-container.nc-old-login.show-click-captcha{padding-bottom:60px}.nc-container.nc-old-login.show-click-captcha.nc-tm-min-fix{padding-bottom:40px}.nc-container.tb-login.nc-tm-min-fix .clickCaptcha{max-height:340px !important}#content .login-box .bd .nc-container.tb-login .login-msg{margin:10px auto 15px auto}#content .login-box .bd .nc-container.tb-login.nc-old-login.show-click-captcha .login-msg{margin:2px 0 0 0}.nc-container .nc_scale .nc-cc{display:none;position:absolute;left:0;top:35px;z-index:20000;width:360px;height:570px;border:1px solid #5eaef1;border-radius:4px;background:#fff;font-size:14px;line-height:18px;color:#333;}.nc-container .nc_scale .nc-cc.nc-cc-status-loading .nc-cc-btn,.nc-container .nc_scale .nc-cc.nc-cc-status-verifing .nc-cc-btn{background-color:#90c1eb}.nc-container .nc_scale .nc-cc.nc-cc-status-loading .nc-cc-btn,.nc-container .nc_scale .nc-cc.nc-cc-status-verifing .nc-cc-btn,.nc-container .nc_scale .nc-cc.nc-cc-status-loading .nc-cc-refresh,.nc-container .nc_scale .nc-cc.nc-cc-status-verifing .nc-cc-refresh{cursor:default}.nc-container .nc_scale .nc-cc.nc-cc-status-loading .nc-cc-refresh,.nc-container .nc_scale .nc-cc.nc-cc-status-verifing .nc-cc-refresh{color:#999}.nc-container .nc_scale .nc-cc a{color:#3199f4;text-decoration:none}.nc-container .nc_scale .nc-cc .nc_iconfont{vertical-align:top;margin-right:8px}.nc-container .nc_scale .nc-cc-btn{display:inline-block;*display:inline;*zoom:1;vertical-align:top;letter-spacing:normal;word-spacing:normal;width:100px;line-height:30px;text-align:center;background-color:#3199f4;color:#fff;border-radius:4px;cursor:pointer;}.nc-container .nc_scale .nc-cc-btn.nc-cc-disabled{background-color:#90c1eb;cursor:default}.nc-container .nc_scale .nc-cc-btn .nc-lang-cnt{line-height:18px}.nc-container .nc_scale .nc-cc-header{padding:20px 20px 19px 20px;height:100px;background:#f4f8fa;border-bottom:1px solid #ccc}.nc-container .nc_scale .nc-cc-img1-box{float:left;width:100px;height:100px;margin-right:16px}.nc-container .nc_scale .nc-cc-txt{overflow:hidden;*zoom:1;line-height:30px;padding-top:11px}.nc-container .nc_scale .nc-cc-img2-box{position:relative;padding:0 20px;margin-top:20px}.nc-container .nc_scale .nc-cc-items{position:absolute;left:20px;_left:0;top:0;width:320px;overflow:hidden}.nc-container .nc_scale .nc-cc-items-inner{margin-right:-20px}.nc-container .nc_scale .nc-cc-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:top;letter-spacing:normal;word-spacing:normal;margin-right:10px;margin-bottom:10px;border:1px solid #ccc;width:98px;height:98px;background:url("//gtms02.alicdn.com/tps/i2/T1ty2QFNNXXXc6Yc2r-1-1.gif");}.nc-container .nc_scale .nc-cc-item:hover{border-color:#3199f4}.nc-container .nc_scale .nc-cc-item .nc_iconfont{display:none;position:absolute;right:0;bottom:0;color:#3199f4;font-size:22px;margin-right:0}.nc-container .nc_scale .nc-cc-item.nc-cc-selected .nc_iconfont{display:block}.nc-container .nc_scale .nc-cc-tip{display:none;position:absolute;left:0;bottom:60px;width:360px;line-height:18px;text-align:center;color:#eb4f38;}.nc-container .nc_scale .nc-cc-tip span{line-height:normal}.nc-container .nc_scale .nc-cc-footer{position:absolute;left:0;bottom:20px;width:360px;height:30px;line-height:30px;text-align:center;}.nc-container .nc_scale .nc-cc-footer .nc_iconfont{color:#c4cbd0}.nc-container .nc_scale .nc-cc-refresh,.nc-container .nc_scale .nc-cc-wait{position:absolute;left:20px;top:0;color:#3199f4;cursor:pointer}.nc-container .nc_scale .nc-cc-wait{display:none}.nc-container .nc_scale .nc-cc-cancel{position:absolute;right:20px;top:0;color:#3199f4;cursor:pointer;}.nc-container .nc_scale .nc-cc-cancel .nc_iconfont{position:relative;top:-1px}.nc-container .nc_scale .nc-cc-loading{margin-top:247px;text-align:center;line-height:14px}.nc-container .nc_scale .nc-cc-loading-img{display:inline-block;*display:inline;*zoom:1;vertical-align:top;letter-spacing:normal;word-spacing:normal;vertical-align:middle;background:url("//img.alicdn.com/tps/TB1OdxsKpXXXXcgXFXXXXXXXXXX-14-14.gif") no-repeat;width:14px;height:14px;position:relative;top:-1px;margin-right:9px}.nc-container .nc_scale .nc-cc-fail{position:absolute;left:50%;top:50%;width:320px;height:180px;margin-left:-160px;margin-top:-90px;background:#fff;border-radius:4px}.nc-container .nc_scale .nc-cc-fail-inner{text-align:center;padding:55px 10px 10px}.nc-container .nc_scale .nc-cc-fail-action{margin:28px 0 18px;}.nc-container .nc_scale .nc-cc-fail-action a{display:inline-block;*display:inline;*zoom:1;vertical-align:top;letter-spacing:normal;word-spacing:normal;line-height:30px;margin-left:16px}.nc-container .nc_scale .nc-cc-contact{text-align:right;color:#666;padding-right:9px}.nc-container .nc_scale .nc-cc-mask{display:none;position:absolute;left:0;top:0;width:360px;height:570px;background:rgba(0,0,0,0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled='true',startColorstr='#4C000000', endColorstr='#4C000000');}:root .nc-container .nc_scale .nc-cc-mask{-webkit-filter:none;filter:none}.nc-container .nc_scale .nc-cc-arrow-1,.nc-container .nc_scale .nc-cc-arrow-2{display:none;position:absolute;top:340px;border:solid transparent;height:0;width:0}.nc-container .nc_scale .nc-cc-arrow-1{border-width:16px;margin-top:-1px}.nc-container .nc_scale .nc-cc-arrow-2{border-width:15px}.nc-container .nc_scale .nc-cc-right .nc-cc-arrow-1,.nc-container .nc_scale .nc-cc-left .nc-cc-arrow-1,.nc-container .nc_scale .nc-cc-right .nc-cc-arrow-2,.nc-container .nc_scale .nc-cc-left .nc-cc-arrow-2{display:block;_display:none}.nc-container .nc_scale .nc-cc-right{left:180px;top:-339px;}.nc-container .nc_scale .nc-cc-right .nc-cc-arrow-1{border-right-color:#5eaef1;left:-32px}.nc-container .nc_scale .nc-cc-right .nc-cc-arrow-2{border-right-color:#fff;left:-30px}.nc-container .nc_scale .nc-cc-left{left:-335px;top:-339px;}.nc-container .nc_scale .nc-cc-left .nc-cc-arrow-1{border-left-color:#5eaef1;right:-32px}.nc-container .nc_scale .nc-cc-left .nc-cc-arrow-2{border-left-color:#fff;right:-30px}</style><link rel="stylesheet" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/share_style0_16.css"><style type="text/css">.MathJax_Preview {color: #888}
#MathJax_Message {position: fixed; left: 1px; bottom: 2px; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap}
#MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px}
.MathJax_Error {color: #CC0000; font-style: italic}
</style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; color: black; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_About.MathJax_MousePost {outline: none}
.MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 5px 0px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -khtml-border-radius: 5px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
.MathJax_MenuItem {padding: 1px 2em; background: transparent}
.MathJax_MenuArrow {position: absolute; right: .5em; padding-top: .25em; color: #666666; font-size: .75em}
.MathJax_MenuActive .MathJax_MenuArrow {color: white}
.MathJax_MenuArrow.RTL {left: .5em; right: auto}
.MathJax_MenuCheck {position: absolute; left: .7em}
.MathJax_MenuCheck.RTL {right: .7em; left: auto}
.MathJax_MenuRadioCheck {position: absolute; left: .7em}
.MathJax_MenuRadioCheck.RTL {right: .7em; left: auto}
.MathJax_MenuLabel {padding: 1px 2em 3px 1.33em; font-style: italic}
.MathJax_MenuRule {border-top: 1px solid #DDDDDD; margin: 4px 3px}
.MathJax_MenuDisabled {color: GrayText}
.MathJax_MenuActive {background-color: #606872; color: white}
.MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus {background-color: #E8E8E8}
.MathJax_ContextMenu:focus {outline: none}
.MathJax_ContextMenu .MathJax_MenuItem:focus {outline: none}
#MathJax_AboutClose {top: .2em; right: .2em}
.MathJax_Menu .MathJax_MenuClose {top: -10px; left: -10px}
.MathJax_MenuClose {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #AAA; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; font-family: 'Courier New',Courier; font-size: 24px; color: #F0F0F0}
.MathJax_MenuClose span {display: block; background-color: #AAA; border: 1.5px solid; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; line-height: 0; padding: 8px 0 6px}
.MathJax_MenuClose:hover {color: white!important; border: 2px solid #CCC!important}
.MathJax_MenuClose:hover span {background-color: #CCC!important}
.MathJax_MenuClose:hover:focus {outline: none}
</style><style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')}
#MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
#MathJax_ZoomFrame {position: relative; display: inline-block; height: 0; width: 0}
#MathJax_ZoomEventTrap {position: absolute; left: 0; top: 0; z-index: 302; display: inline-block; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)}
</style></head>

<body><div id="MathJax_Message" style="display: none;"></div><div id="BAIDU_DUP_fp_wrapper" style="position: absolute; left: -1px; bottom: -1px; z-index: 0; width: 0px; height: 0px; overflow: hidden; visibility: hidden; display: none;"><iframe id="BAIDU_DUP_fp_iframe" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/o.html" style="width: 0px; height: 0px; visibility: hidden; display: none;"></iframe></div>

<script type="text/javascript" async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/ycrm_002.js"></script><script type="text/javascript" async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/ycrm.js"></script><script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/z_stat.js"></script><script async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/analytics.js"></script><script type="text/javascript" async="" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/vds.js"></script><script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/growingio.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/mask.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/jquery.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/header.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/web_socket.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/websocket.js"></script>


<div id="header_top_notice" style="display: block;"></div>
<div id="jk-header">
	<div class="header">
		<h1>
			<a href="http://www.jikexueyuan.com/" class="logo">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/logo.png" alt="极客学院" data-bd-imgshare-binded="1" width="100">
			</a>
		</h1>
		<nav style="width:490px;">
			<ul>
				<li>
					<a href="http://www.jikexueyuan.com/" class="home">首页</a>
				</li>
				<li class="careerpath">
					<a href="http://www.jikexueyuan.com/zhiye/">职业</a><i class="slide-icon"></i>
					<div class="zhiye-submenu slide-submeu">
						<strong>前端</strong>
						<a href="http://www.jikexueyuan.com/zhiye/web"><i class="web-icon"></i>Web前端工程师</a>
						<a href="http://www.jikexueyuan.com/zhiye/wechatapp"><i class="wx-icon"></i>微信小程序</a>
						<strong>移动端</strong>
						<a href="http://www.jikexueyuan.com/zhiye/android"><i class="android-icon"></i>Android工程师</a>
						<a href="http://www.jikexueyuan.com/zhiye/ios"><i class="ios-icon"></i>iOS工程师</a>
						<strong>后端</strong>
						<a href="http://www.jikexueyuan.com/zhiye/python"><i class="python-icon"></i>Python工程师</a>
						<a href="http://www.jikexueyuan.com/zhiye/php"><i class="php-icon"></i>PHP工程师</a>
						<a href="http://www.jikexueyuan.com/zhiye/go"><i class="golang-icon"></i>Golang工程师</a>
						<strong>大数据</strong>
						<a href="http://www.jikexueyuan.com/zhiye/bigdata"><i class="data-icon"></i>大数据平台研发工程师</a>
						<strong>人工智能</strong>
						<a href="http://www.jikexueyuan.com/zhiye/ml"><i class="mlearning-icon"></i>机器学习工程师</a>
						<!--<a href="#"><i class="yw-icon"></i>运维工程师</a>
								<a href="#"><i class="xmjl-icon"></i>项目经理</a>-->
					</div>
				</li>
				<li>
					<a href="http://www.jikexueyuan.com/course/">课程</a><i class="slide-icon"></i>
					<div class="slide-submeu">
						<a href="http://www.jikexueyuan.com/course/">课程库</a>
						<a href="http://ke.jikexueyuan.com/zhiye/">职业路径</a>
						<a href="http://www.jikexueyuan.com/path/">知识体系图</a>
						<a href="http://ke.jikexueyuan.com/xilie/">系列课程</a>
					</div>
				</li>
				<li>
					<a href="http://www.jikexueyuan.com/partner">企业</a><i class="slide-icon"></i>
					<div class="slide-submeu qy-box">
						<a href="http://zt.jikexueyuan.com/microsoftai"><i class="wr-icon"></i>微软人工智能 </a>
						<a href="http://zt.jikexueyuan.com/baiduai"><i class="baidu-icon"></i>百度AI图像技术课</a>
						<a href="http://zt.jikexueyuan.com/aws"><i class="aws-icon"></i>AWS云计算</a>
						<a href="http://zt.jikexueyuan.com/qcloud"><i class="txy-icon"></i>腾讯云课程专区</a>
						<a href="http://zt.jikexueyuan.com/qualcomm"><i class="gt-icon"></i>Qualcomm公开课 </a>
					</div>
				</li>
				<li>
					<a href="http://wiki.jikexueyuan.com/">社区</a><i class="slide-icon"></i>
					<div class="slide-submeu">
						<a href="http://wiki.jikexueyuan.com/">Wiki</a>
						<a href="http://wenda.jikexueyuan.com/">技术问答</a>
						<a href="http://qun.jikexueyuan.com/">社群</a>
						<a href="http://download.jikexueyuan.com/">资料下载</a>
					</div>

				</li>
			</ul>
		</nav>
		<div class="search">
			<input class="searchinput" id="searchinput" placeholder="搜索课程、问答或Wiki">
			<span class="search-icon" id="search-bottom"></span>
			<div class="search-result">
				<!-- <a href="javascript:;" class="search-hot">热门搜索 <span class="label label-green">职业课程</span></a>
				<a href="javascript:;">hello world <span class="label label-blue">知识图谱</span></a>
				<a href="javascript:;">hello world <span class="label label-purple">系列课程</span></a> -->
			</div>
		</div>
		<div class="nav-other" id="nav-other">
			<div class="centerbox" style="display: none;">
				<a href="http://xue.jikexueyuan.com/" class="learn-center" title="学习中心"></a>
			</div>
			<div class="centerbox" style="display: none;">
				<a href="http://www.jikexueyuan.com/member/notifications/" class="message" id="message" title="消息中心"><i class="have" id="have" style="display: none;"></i></a>
			</div>
		<span class="userinfo-notlogin">
                       <a href="http://passport.jikexueyuan.com/sso/login">登录</a><i></i><a href="http://passport.jikexueyuan.com/sso/reg_phone">注册</a>
                       </span></div>
	</div>
</div>

<ol class="breadcrumb">
	<li class="head-catalog-list">
		<a href="https://www.jikexueyuan.com/">首页</a>
	</li>
    <li class="head-catalog-list">
        <a href="http://wiki.jikexueyuan.com/">Wiki</a>
    </li>
    <li class="head-catalog-list">
        <a href="http://wiki.jikexueyuan.com/list/back-end">后端开发</a>
    </li>
    <li class="head-catalog-list">
        <a href="http://wiki.jikexueyuan.com/list/python">Python</a>
    </li>
    <li class="head-catalog-list">
        <a href="http://wiki.jikexueyuan.com/project/scrapy" class="active">Scrapy 中文指南</a>
    </li>
</ol>

<div class="detail-wrapper w-1200  clearfix">
	<div class="detail-left">

		<!-- 目录 -->
		<ul class="detail-nav">
			<li class="detail-navlist navlist-one ">
				<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/">关于</a></div>
			</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/start-scrapy.html">初窥 Scrapy</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/scrapy-install.html">安装指南</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one  navlist-active ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/scrapy-tutorial.html">Scrapy 入门教程</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/example.html">例子</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/command-line-tools.html">命令行工具(Command line tools)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/items.html">Items</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/spiders.html">Spiders</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/selectors.html">选择器(Selectors)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/item-loaders.html">Item Loaders</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/scrapy-shell.html">Scrapy 终端(Scrapy shell)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/item-pipeline.html">Item Pipeline</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/feed-exports.html">Feed exports</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/link-extractors.html">Link Extractors</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/logging.html">Logging</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/stats-collection.html">数据收集(Stats Collection)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/send-email.html">发送 email</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/telnet-console.html">Telnet 终端(Telnet Console)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/web-service.html">Web Service</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/question.html">常见问题(FAQ)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/debugging.html">调试(Debugging)Spiders</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/spiders-contracts.html">Spiders Contracts</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/common-practices.html">实践经验(Common Practices)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/broad-crawls.html">通用爬虫(Broad Crawls)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/firefox.html">借助 Firefox 来爬取</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/firebug.html">使用 Firebug 进行爬取</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/debug-memory.html">调试内存溢出</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/download-picture.html">下载项目图片</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/ubuntu.html">Ubuntu 软件包</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/scrapyd.html">Scrapyd</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/autothrottle.html">自动限速(AutoThrottle)扩展</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/benchmarking.html">Benchmarking</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/jobs.html">Jobs:暂停，恢复爬虫</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/django-item.html">DjangoItem</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/scheduler.html">架构概览</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/downloader-middleware.html">下载器中间件(Downloader Middleware)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/spider-middleware.html">Spider 中间件(Middleware)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/extensions.html">扩展(Extensions)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/api.html">核心 API</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/settings.html">Settings</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/signals.html">信号(Signals)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/exceptions.html">异常(Exceptions)</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/item-exporters.html">Item Exporters</a>
							</div>
					</li>
			<li class="detail-navlist navlist-one ">
			<div class="detail-navlist-title"><a href="http://wiki.jikexueyuan.com/project/scrapy/experiment.html">试验阶段特性</a>
							</div>
					</li>
			</ul>
		<!-- ／目录 -->
		<!-- ad -->
		<ul>
            		</ul>
		<!-- ／ad -->
	</div>
	
	<!-- 暂时隐藏 -->
	<aside class="detail-right" style="display: none">

		<!-- /author -->
					<div class="mg-t10 ad" id="banner03-1"></div>
<div class="mg-t10 ad" id="banner03-2"></div>

<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/os.js"></script>
<script type="text/javascript">
    BAIDU_CLB_fillSlotAsync('1176465', 'banner03-1');
    BAIDU_CLB_fillSlotAsync('1176466', 'banner03-2');
</script>				<!-- download -->
		<h2 class="right-h2">离线下载</h2>
		<div class="right-download">
							<a href="http://wpa.qq.com/msgrd?v=3&amp;uin=2814373619&amp;site=qq&amp;menu=yes" title="请加极客学院QQ获取技术资料" target="_blank">获取电子书</a>
											
		</div>
		<!-- /download -->

		<!-- resource -->
		<h2 class="right-h2">相关资源</h2>
		<ul class="right-resource">
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/iconblog.png" data-bd-imgshare-binded="1"><a href="http://wiki.jikexueyuan.com/project/learn-python-hard-way" target="_blank"> 笨办法学 Python</a>
			</li>
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/iconblog.png" data-bd-imgshare-binded="1"><a href="http://wiki.jikexueyuan.com/project/python-crawler-guide" target="_blank"> Python 爬虫学习系列教程</a>
			</li>
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/iconvideo.png" data-bd-imgshare-binded="1"><a href="http://www.jikexueyuan.com/course/178.html" target="_blank"> JavaScript语法详解</a>
			</li>
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/iconask.png" data-bd-imgshare-binded="1"><a href="http://wenda.jikexueyuan.com/question/24568" target="_blank"> 为什么 尾-首 还要+1？</a>
			</li>
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/icondown.png" data-bd-imgshare-binded="1"><a href="http://download.jikexueyuan.com/detail/id/257" target="_blank"> 初学者福利：Python语言入门（PDF版）</a>
			</li>
						<li class="resource-item">
				<img src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/icongroup.png" data-bd-imgshare-binded="1"><a href="http://qun.jikexueyuan.com/activity/topic/396" target="_blank"> 【立即领取】《Effective Python：编写高质量Python代码》</a>
			</li>
					</ul>
		<!-- /resource -->

	</aside>

	<div class="detail-main">
		<!-- download -->
		<div class="offline-download">
			<table>
				<thead>
					<tr>
						<th colspan="2">离线下载</th>
					</tr>
				</thead>
				<tbody>
										<tr>
						<td><a href="http://wpa.qq.com/msgrd?v=3&amp;uin=2814373619&amp;site=qq&amp;menu=yes" title="请加极客学院QQ获取技术资料" target="_blank">获取电子书</a></td>
																	</tr>
									</tbody>
			</table>
		</div>
		<!-- /download -->

		<div class="markdown-body">
			<!-- 欢迎成为极客学院WIKI作者 -->
						<!-- 授权极客学院转载 -->
				<p class="author"><a href="https://github.com/marchtea" class="reprint-name right-top-img" data-name="点击授权商" target="_blank">Summer</a> · 更新于 2018-03-14 09:00:59</p>
						<!-- 内容 -->
			<h1>Scrapy 入门教程</h1>
<p>在本篇教程中，我们假定您已经安装好 Scrapy。 如若不然，请参考<code>安装指南</code> 。</p>
<p>接下来以 <a rel="nofollow" href="http://www.dmoz.org/" "="">Open Directory Project(dmoz) (dmoz)</a> 为例来讲述爬取。</p>
<p>本篇教程中将带您完成下列任务:</p>
<ol>
<li>创建一个 Scrapy 项目</li>
<li>定义提取的 Item</li>
<li>编写爬取网站的 <code>spider</code> 并提取 <code>Item</code></li>
<li>编写 <code>Item Pipeline</code> 来存储提取到的 Item(即数据)</li>
</ol>
<p>Scrapy 由 <a rel="nofollow" href="https://www.python.org/" "="">Python</a> 编写。如果您刚接触并且好奇这门语言的特性以及 Scrapy 的详情，对于已经熟悉其他语言并且想快速学习 Python 的编程老手，我们推荐 <a rel="nofollow" href="http://learnpythonthehardway.org/book/" "="">Learn Python The Hard Way</a>，对于想从 Python 开始学习的编程新手，<a rel="nofollow" href="http://wiki.python.org/moin/BeginnersGuide/NonProgrammers" "="">非程序员的 Python 学习资料列表</a>将是您的选择。</p>
<h2 id="39da675592eef17e074e67bc24c2f032">创建项目</h2>
<p>在开始爬取之前，您必须创建一个新的 Scrapy 项目。 进入您打算存储代码的目录中，运行下列命令:</p>
<pre><code>scrapy startproject tutorial</code></pre>
<p>该命令将会创建包含下列内容的 tutorial 目录:</p>
<pre><code>tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...</code></pre>
<p>这些文件分别是:</p>
<ul>
<li>scrapy.cfg: 项目的配置文件</li>
<li>tutorial/: 该项目的 python 模块。之后您将在此加入代码。</li>
<li>tutorial/items.py: 项目中的 item 文件。</li>
<li>tutorial/pipelines.py: 项目中的 pipelines 文件。</li>
<li>tutorial/settings.py: 项目的设置文件。</li>
<li>tutorial/spiders/: 放置 spider 代码的目录。</li>
</ul>
<h2 id="164af956592b5ef2a86b34e783d6d779">定义 Item</h2>
<p>Item 是保存爬取到的数据的容器；其使用方法和 python 字典类似， 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。</p>
<p>类似在 ORM 中做的一样，您可以通过创建一个 <code>scrapy.Item</code> 类， 并且定义类型为 <code>scrapy.Field</code> 的类属性来定义一个 Item。 (如果不了解 ORM, 不用担心，您会发现这个步骤非常简单)</p>
<p>首先根据需要从 dmoz.org 获取到的数据对 item 进行建模。 我们需要从 dmoz 中获取名字，url，以及网站的描述。 对此，在 item 中定义相应的字段。编辑 <code>tutorial</code> 目录中的 <code>items.py</code> 文件:</p>
<pre><code>import scrapy

class DmozItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()</code></pre>
<p>一开始这看起来可能有点复杂，但是通过定义 item， 您可以很方便的使用 Scrapy 的其他方法。而这些方法需要知道您的 item 的定义。</p>
<h2 id="6c3be0596a06dad26ca63e872fc861bb">编写第一个爬虫(Spider)</h2>
<p>Spider 是用户编写用于从单个网站(或者一些网站)爬取数据的类。</p>
<p>其包含了一个用于下载的初始 URL，如何跟进网页中的链接以及如何分析页面中的内容， 提取生成 <code>item</code> 的方法。</p>
<p>为了创建一个 Spider，您必须继承 <code>scrapy.Spider</code> 类， 且定义以下三个属性:</p>
<ul>
<li><code>name</code>: 用于区别 Spider。 该名字必须是唯一的，您不可以为不同的 Spider 设定相同的名字。</li>
<li><code>start_urls</code>: 包含了 Spider 在启动时进行爬取的 url 列表。 因此，第一个被获取到的页面将是其中之一。 后续的 URL 则从初始的 URL 获取到的数据中提取。</li>
<li><code>parse()</code> 是 spider 的一个方法。 被调用时，每个初始 URL 完成下载后生成的 <code>Response</code> 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data)，提取数据(生成 item)以及生成需要进一步处理的 URL 的 `Request 对象。</li>
</ul>
<p>以下为我们的第一个 Spider 代码，保存在 tutorial/spiders 目录下的 dmoz_spider.py 文件中:</p>
<pre><code>import scrapy

class DmozSpider(scrapy.spiders.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body)</code></pre>
<h3>爬取</h3>
<p>进入项目的根目录，执行下列命令启动 spider:</p>
<pre><code>scrapy crawl dmoz</code></pre>
<p><code>crawl dmoz</code> 启动用于爬取 <code>dmoz.org</code> 的 spider，您将得到类似的输出:</p>
<pre><code>2014-01-23 18:13:07-0400 [scrapy] INFO: Scrapy started (bot: tutorial)
2014-01-23 18:13:07-0400 [scrapy] INFO: Optional features available: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Overridden settings: {}
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled extensions: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled downloader middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled spider middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled item pipelines: ...
2014-01-23 18:13:07-0400 [dmoz] INFO: Spider opened
2014-01-23 18:13:08-0400 [dmoz] DEBUG: Crawled (200) &lt;GET http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/&gt; (referer: None)
2014-01-23 18:13:09-0400 [dmoz] DEBUG: Crawled (200) &lt;GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt; (referer: None)
2014-01-23 18:13:09-0400 [dmoz] INFO: Closing spider (finished)</code></pre>
<p>查看包含 <code>[dmoz]</code> 的输出，可以看到输出的 log 中包含定义在 <code>start_urls</code> 的初始 URL，并且与 spider 中是一一对应的。在 log 中可以看到其没有指向其他页面( (<code>referer:None</code>) )。</p>
<p>除此之外，更有趣的事情发生了。就像我们 parse 方法指定的那样，有两个包含 url 所对应的内容的文件被创建了: Book，Resources 。</p>
<h3>刚才发生了什么？</h3>
<p>Scrapy 为 Spider 的 start_urls 属性中的每个 URL 创建了 scrapy.Request 对象，并将 parse 方法作为回调函数(callback)赋值给了 Request。</p>
<p>Request 对象经过调度，执行生成 <code>scrapy.http.Response</code> 对象并送回给 <code>spider parse()</code> 方法。</p>
<h3>提取 Item</h3>
<h4>Selectors 选择器简介</h4>
<p>从网页中提取数据有很多方法。Scrapy 使用了一种基于 <a rel="nofollow" href="http://www.w3.org/TR/xpath" "="">XPath</a> 和 <a rel="nofollow" href="http://www.w3.org/TR/selectors" "="">CSS</a> 表达式机制: <code>Scrapy Selectors</code>。 关于 selector 和其他提取机制的信息请参考 <code>Selector</code> 文档。</p>
<p>这里给出 XPath 表达式的例子及对应的含义:</p>
<ul>
<li><code>/html/head/title</code>: 选择 HTML 文档中<code>&lt;head&gt;</code>标签内的<code>&lt;title&gt;</code>元素</li>
<li><code>/html/head/title/text()</code>: 选择上面提到的<code>&lt;title&gt;</code>元素的文字</li>
<li><code>//td</code>: 选择所有的<code>&lt;td&gt;</code>元素</li>
<li><code>//div[@class="mine"]</code>: 选择所有具有 class="mine"属性的 div 元素</li>
</ul>
<p>上边仅仅是几个简单的 XPath 例子，XPath 实际上要比这远远强大的多。 如果您想了解的更多，我们推荐<a rel="nofollow" href="http://www.w3school.com.cn/xpath/index.asp" "="">这篇 XPath 教程</a>。</p>
<p>为了配合 XPath，Scrapy 除了提供了 <code>Selector</code> 之外，还提供了方法来避免每次从 response 中提取数据时生成 selector 的麻烦。</p>
<p>Selector 有四个基本的方法(点击相应的方法可以看到详细的 API 文档):</p>
<ul>
<li><code>xpath()</code>: 传入 xpath 表达式，返回该表达式所对应的所有节点的 selector list 列表 。</li>
<li><code>css()</code>: 传入 CSS 表达式，返回该表达式所对应的所有节点的 selector list 列表.</li>
<li><code>extract()</code>: 序列化该节点为 unicode 字符串并返回 list。</li>
<li><code>re()</code>: 根据传入的正则表达式对数据进行提取，返回 unicode 字符串 list 列表。</li>
</ul>
<h4>在 Shell 中尝试 Selector 选择器</h4>
<p>为了介绍 Selector 的使用方法，接下来我们将要使用内置的 Scrapy shell。Scrapy Shell 需要您预装好 IPython(一个扩展的 Python 终端)。</p>
<p>您需要进入项目的根目录，执行下列命令来启动 shell:</p>
<pre><code>scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"</code></pre>
<blockquote>
<p>注解</p>
<p>当您在终端运行 Scrapy 时，请一定记得给 url 地址加上引号，否则包含参数的 url(例如 &amp; 字符)会导致 Scrapy 运行失败。</p>
</blockquote>
<p>shell 的输出类似:</p>
<pre><code>[ ... Scrapy log here ... ]

2015-01-07 22:01:53+0800 [domz] DEBUG: Crawled (200) &lt;GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt; (referer: None)
[s] Available Scrapy objects:
[s]   crawler    &lt;scrapy.crawler.Crawler object at 0x02CE2530&gt;
[s]   item       {}
[s]   request    &lt;GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt;
[s]   response   &lt;200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt;
[s]   sel        &lt;Selector xpath=None data=u'&lt;html lang="en"&gt;\r\n&lt;head&gt;\r\n&lt;meta http-equ'&gt;
[s]   settings   &lt;CrawlerSettings module=&lt;module 'tutorial.settings' from 'tutorial\settings.pyc'&gt;&gt;
[s]   spider     &lt;DomzSpider 'domz' at 0x302e350&gt;
[s] Useful shortcuts:
[s]   shelp()           Shell help (print this help)
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects
[s]   view(response)    View response in a browser

&gt;&gt;&gt;</code></pre>
<p>当 shell 载入后，您将得到一个包含 response 数据的本地 response 变量。输入 response.body 将输出 response 的包体，输出 response.headers 可以看到 response 的包头。</p>
<p>更为重要的是，当输入 response.selector 时， 您将获取到一个可以用于查询返回数据的 selector(选择器)， 
以及映射到 response.selector.xpath() 、response.selector.css() 的 
快捷方法(shortcut): response.xpath() 和 response.css() 。</p>
<p>同时，shell 根据 response 提前初始化了变量 sel 。该 selector 根据 response 的类型自动选择最合适的分析规则(XML vs HTML)。</p>
<p>让我们来试试:</p>
<pre><code>In [1]: sel.xpath('//title')
Out[1]: [&lt;Selector xpath='//title' data=u'&lt;title&gt;Open Directory - Computers: Progr'&gt;]

In [2]: sel.xpath('//title').extract()
Out[2]: [u'&lt;title&gt;Open Directory - Computers: Programming: Languages: Python: Books&lt;/title&gt;']

In [3]: sel.xpath('//title/text()')
Out[3]: [&lt;Selector xpath='//title/text()' data=u'Open Directory - Computers: Programming:'&gt;]

In [4]: sel.xpath('//title/text()').extract()
Out[4]: [u'Open Directory - Computers: Programming: Languages: Python: Books']

In [5]: sel.xpath('//title/text()').re('(\w+):')
Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']</code></pre>
<h4>提取数据</h4>
<p>现在，我们来尝试从这些页面中提取些有用的数据。</p>
<p>您可以在终端中输入 <code>response.body</code> 来观察 HTML 源码并确定合适的 XPath 表达式。不过，这任务非常无聊且不易。您可以考虑使用 Firefox 的 Firebug 扩展来使得工作更为轻松。详情请参考 使用 <a rel="nofollow" href="http://scrapy-chs.readthedocs.org/zh_CN/latest/topics/firebug.html#topics-firebug" "="">Firebug 进行爬取</a>和<a rel="nofollow" href="http://scrapy-chs.readthedocs.org/zh_CN/latest/topics/firefox.html#topics-firefox" "="">借助 Firefox 来爬取</a>。</p>
<p>在查看了网页的源码后，您会发现网站的信息是被包含在 第二个 &lt;ul&gt; 元素中。</p>
<p>我们可以通过这段代码选择该页面中网站列表里所有 &lt;li&gt; 元素:</p>
<pre><code>sel.xpath('//ul/li')</code></pre>
<p>网站的描述:</p>
<pre><code>sel.xpath('//ul/li/text()').extract()</code></pre>
<p>网站的标题:</p>
<pre><code>sel.xpath('//ul/li/a/text()').extract()</code></pre>
<p>以及网站的链接:</p>
<pre><code>sel.xpath('//ul/li/a/@href').extract()</code></pre>
<p>之前提到过，每个<code>.xpath()</code>调用返回 selector 组成的 list，因此我们可以拼接更多的<code>.xpath()</code>来进一步获取某个节点。我们将在下边使用这样的特性:</p>
<pre><code>for sel in response.xpath('//ul/li'):
    title = sel.xpath('a/text()').extract()
    link = sel.xpath('a/@href').extract()
    desc = sel.xpath('text()').extract()
    print title, link, desc</code></pre>
<blockquote>
<p>注解</p>
<p>关于嵌套 selctor 的更多详细信息，请参考 嵌套选择器(selectors) 以及 选择器(Selectors) 文档中的 使用相对 XPaths 部分。</p>
</blockquote>
<p>在我们的 spider 中加入这段代码:</p>
<pre><code>import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            title = sel.xpath('a/text()').extract()
            link = sel.xpath('a/@href').extract()
            desc = sel.xpath('text()').extract()
            print title, link, desc</code></pre>
<p>现在尝试再次爬取 dmoz.org，您将看到爬取到的网站信息被成功输出:</p>
<pre><code>scrapy crawl dmoz</code></pre>
<h3>使用 item</h3>
<p>Item 对象是自定义的 python 字典。您可以使用标准的字典语法来获取到其每个字段的值。(字段即是我们之前用 Field 赋值的属性):</p>
<pre><code>&gt;&gt;&gt; item = DmozItem()
&gt;&gt;&gt; item['title'] = 'Example title'
&gt;&gt;&gt; item['title']
'Example title'</code></pre>
<p>一般来说，Spider 将会将爬取到的数据以 Item 对象返回。所以为了将爬取的数据返回，我们最终的代码将是:</p>
<pre><code>import scrapy

from tutorial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('text()').extract()
            yield item</code></pre>
<blockquote>
<p>注解</p>
<p>您可以在 <a rel="nofollow" href="https://github.com/scrapy/dirbot" "="">dirbot</a> 项目中找到一个具有完整功能的 spider。该项目可以通过 <a rel="nofollow" href="https://github.com/scrapy/dirbot" "=""></a><a rel="nofollow" href="https://github.com/scrapy/dirbot" "="">https://github.com/scrapy/dirbot</a> 找到。</p>
</blockquote>
<p>现在对 dmoz.org 进行爬取将会产生 <code>DmozItem</code> 对象:</p>
<pre><code>[dmoz] DEBUG: Scraped from &lt;200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt;
     {'desc': [u' - By David Mertz; Addison Wesley. Book in progress, full text, ASCII format. Asks for feedback. [author website, Gnosis Software, Inc.\n],
      'link': [u'http://gnosis.cx/TPiP/'],
      'title': [u'Text Processing in Python']}
[dmoz] DEBUG: Scraped from &lt;200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&gt;
     {'desc': [u' - By Sean McGrath; Prentice Hall PTR, 2000, ISBN 0130211192, has CD-ROM. Methods to build XML applications fast, Python tutorial, DOM and SAX, new Pyxie open source XML processing library. [Prentice Hall PTR]\n'],
      'link': [u'http://www.informit.com/store/product.aspx?isbn=0130211192'],
      'title': [u'XML Processing with Python']}</code></pre>
<h2 id="daf98fc926e86bfae4382d8058e0e660">保存爬取到的数据</h2>
<p>最简单存储爬取的数据的方式是使用 <code>Feed exports</code>:</p>
<pre><code>scrapy crawl dmoz -o items.json</code></pre>
<p>该命令将采用 <a rel="nofollow" href="http://en.wikipedia.org/wiki/JSON" "="">JSON</a> 格式对爬取的数据进行序列化，生成 <code>items.json</code> 文件。</p>
<p>在类似本篇教程里这样小规模的项目中，这种存储方式已经足够。 如果需要对爬取到的 item 做更多更为复杂的操作，您可以编写 <code>Item Pipeline</code> 。 类似于我们在创建项目时对 Item 做的，用于您编写自己的 <code>tutorial/pipelines.py</code> 也被创建。 不过如果您仅仅想要保存 item，您不需要实现任何的 pipeline。</p>
<h2 id="38ce27d84639f3a6e07c00b3b4995c0e">下一步</h2>
<p>本篇教程仅介绍了 Scrapy 的基础，还有很多特性没有涉及。请查看 初窥 Scrapy 章节中的 还有什么？ 部分,大致浏览大部分重要的特性。</p>
<p>接着，我们推荐您把玩一个例子(查看<code>例子</code>)，而后继续阅读<code>基本概念</code> 。</p>
		</div>

		
		<div class="previous-and-next">
							<span class="pull-left">上一篇: <a id="previous_link" href="http://wiki.jikexueyuan.com/project/scrapy/scrapy-install.html" data-toggle="tooltip" data-placement="top" title="" data-original-title="上翻页快捷键：左方向键">安装指南</a></span>
			
							<span class="pull-right">下一篇: <a id="next_link" href="http://wiki.jikexueyuan.com/project/scrapy/example.html" data-toggle="tooltip" data-placement="top" title="" data-original-title="下翻页快捷键：右方向键">例子</a></span>
					</div>

		<div class="detail-share clearfix">
			<div class="bdsharebuttonbox share-item bdshare-button-style0-16" data-bd-bind="1520991818393">
				<a href="#" class="bds_more" data-cmd="more"></a>
				<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a>
				<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a>
				<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a>
				<a href="#" class="bds_youdao" data-cmd="youdao" title="分享到有道云笔记"></a>
			</div>
			<script>
				window._bd_share_config = {
					"common": {
						"bdSnsKey": {},
						"bdText": "",
						"bdMini": "2",
						"bdMiniList": false,
						"bdPic": "",
						"bdStyle": "0",
						"bdSize": "16"
					},
					"share": {},
					"image": {
						"viewList": ["weixin", "tsina", "qzone", "youdao"],
						"viewText": "分享到：",
						"viewSize": "16"
					}
				};
				with(document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = '/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];
			</script>
		</div>

		<!--广告-->
				<!--/广告-->

		<!-- 评论 -->
		<div id="jkcomments"><ul></ul><div id="pager"></div><div class="jkxy-subask-nologin">只有登录了才能参与评论，快<a href="http://passport.jikexueyuan.com/sso/login">登录</a>！如果你还没有账号你可以<a href="http://passport.jikexueyuan.com/sso/reg_phone">注册</a>一个账号。</div></div>

		<!-- 新 footer -->
		<div class="wiki-footer">
			<ul>
				<li><a href="http://help.jikexueyuan.com/" target="_blank">关于我们</a></li>
				<li><a href="http://help.jikexueyuan.com/join.html" target="_blank">加入我们</a></li>
				<li><a href="http://help.jikexueyuan.com/contact.html" target="_blank">联系我们</a></li>
				<li><a href="http://j.jikexueyuan.com/evangelist/apply" target="_blank">讲师合作</a></li>
				<li><a href="http://help.jikexueyuan.com/" target="_blank">帮助中心</a></li>
				<li><a href="http://blog.jikexueyuan.com/" target="_blank">黑板报
				</a></li><li><a href="http://www.jikexueyuan.com/friendlink.html" target="_blank">友情链接</a></li>
				<li><a href="javascript:void(0)" onclick="meiqia()" target="_blank">意见反馈</a></li>
			</ul>
		</div>
	</div>

</div>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/jquery_002.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/detail.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/bootstrap.js"></script>
<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/login_register_002.js"></script>


	<script>
		var JKcomments = {
			perPage: 15,
			model: "wiki", //模块名称（必填）
			parent_id: "scrapy",
			item_id: "c6a8cf796669454989bdd2f76f557067" //被评论信息ID（必填）
		}
	</script>

	<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/jquery_003.js"></script>
	<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/comments.js"></script>

<script type="text/javascript">
    $(function(){
        $('[data-toggle="tooltip"]').tooltip();
    });
    var _Sjkxy     = _Sjkxy || [];
    _Sjkxy['params']    = {wikiP:'Scrapy 中文指南' , posId:117001, po:69001 , wPId : '339'};
</script>

<link rel="stylesheet" href="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/footer.css">
		<div id="footer">
			<div class="footer-content">
				<div class="contact-way">
					<div class="other-way">
						<a href="http://blog.jikexueyuan.com/28.html" target="_blank" class="weixin-icon"></a>
						<!--<a href="" class="tencen-icon"></a>-->
						<a href="http://weibo.com/jikexueyuan" target="_blank" class="sina-icon"></a>
						<a href="http://twitter.com/jikexueyuan" target="_blank" class="facebook-icon"></a>
						<a href="http://plus.google.com/communities/117673330839635588089" target="_blank" class="google-icon"></a>
					</div>
				</div>
				<nav>
					<a href="http://help.jikexueyuan.com/" target="_blank">关于我们</a><i>|</i>
					<a href="http://help.jikexueyuan.com/join.html" target="_blank">加入我们</a><i>|</i>
					<a href="http://help.jikexueyuan.com/contact.html" target="_blank">联系我们</a><i>|</i>
					<a href="http://j.jikexueyuan.com/evangelist/apply" target="_blank">讲师合作</a><i>|</i>
					<a href="http://help.jikexueyuan.com/" target="_blank">帮助中心</a><i>|</i>
					<a href="http://blog.jikexueyuan.com/" target="_blank">黑板报</a><i>|</i>
					<a href="http://www.jikexueyuan.com/friendlink.html" target="_blank">友情链接</a>
				</nav>
				<div class="copyright">Copyright © 2013-2017 jikexueyuan.com All Rights Reserved. 京ICP备11018032号 京公网安备11010802013056</div>
			</div>
			<div class="gotop" id="gototop">
				<span class="tel-icon">
            <div class="tel-number"></div>
        </span>
				<!-- <a class="service" href="javascript:void(0);" onclick="meiqia()"></a> -->
				<span class="wx">
            <div class="appewm"></div>
        </span>
				<span class="top"><i style="display: none;"></i></span>
			</div>
		</div>
		<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/login_register.js"></script>
		<script>
function gotop(){var html=$("#gototop");if($(window).scrollTop()<=0){$("#gototop>.top>i").hide()}$("#gototop>.top").bind("click",function(){if($(window).scrollTop()<=0){return false}$("body,html").animate({scrollTop:0},200);return false});$(window).scroll(function(){if($(window).scrollTop()>0){$("#gototop>.top>i").fadeIn()}else{$("#gototop>.top>i").fadeOut()}})}$(function(){gotop()});
		</script>
		<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/meiqia.js"></script>


<script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/growingio_002.js"></script>
<!-- 增加latex 数学公式-->
<script src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/MathJax.js" id=""></script>
<script type="text/x-mathjax-config;executed=true">
    MathJax.Hub.Config({
      tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
    });
</script>



<link type="text/css" href="http://g.alicdn.com/sd/ncpc/nc.css?t=20170228"><script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/nc.js"></script><link type="text/css" href="http://g.alicdn.com/sd/ncpc/nc.css?t=20170228"><script type="text/javascript" src="Scrapy%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B%20-%20Scrapy%20%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97%20-%20%E6%9E%81%E5%AE%A2%E5%AD%A6%E9%99%A2Wiki_files/nc.js"></script><div id="bdimgshare_1520991818396" class="sr-bdimgshare sr-bdimgshare-list sr-bdimgshare-16 sr-bdimgshare-black" style="height:36px;line-height:26px;font-size:12px;width:autopx;display:none;" data-bd-bind="1520991818396"><div class="bdimgshare-bg"></div><div class="bdimgshare-content bdsharebuttonbox bdshare-button-style0-16"><label class="bdimgshare-lbl">分享到：</label><a href="#" onclick="return false;" class="bds_weixin" data-cmd="weixin" hidefocus=""></a><a href="#" onclick="return false;" class="bds_tsina" data-cmd="tsina" hidefocus=""></a><a href="#" onclick="return false;" class="bds_qzone" data-cmd="qzone" hidefocus=""></a><a href="#" onclick="return false;" class="bds_youdao" data-cmd="youdao" hidefocus=""></a><a href="#" onclick="return false;" class="bds_more" data-cmd="more" hidefocus=""></a></div></div></body></html>